zoukankan      html  css  js  c++  java
  • javascript之模拟块级作用域

    在java、C++等语言中,变量i在会在for循环的语句块中定义,循环一旦结束,变量i就会被销毁。可是在javaScript中,从定义开始,就可以在函数内部随处访问。比如

    function output(){
      for(var i=0; i<10; i++){
      }
      alert(i); //10
      var i;  //重新声明
      alert(i); //10
    }

    javaScript会对后续i的声明视而不见,如果后续声明中有变量初始化还是会执行。可以使用匿名函数来模仿块级作用域,或者使用ES6的let命令。

      用块级作用域的匿名函数的语法如下:

    (function(){
    
      //块级作用域
    
    }) ();

    将函数声明保存在一对圆括号中,表示它实际上是一个函数表达式,紧随其后的另一个圆括号会立即调用这个函数。

    function output(){
      (function(){
           for(var i=0; i<10; i++){
      }
    })();
      alert(i); //error
      var i;  //重新声明
      alert(i); //undefined
    }

      这种技术经常在作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。js引擎读取一段js代码,首先预解析(这个名字我起的),就是逐行读取js代码,寻找全局变量和全局函数,遇到全局变量,把变量的值变为undefind,存在内存中,遇到全局函数,直接存在内存中,这个过程如果发现语法错误,预解析终止。限制全局作用域可以减少内存的占用。

    或者使用let命令

    function output(){
      for(let i=0; i<10; i++){
      var i; 
      alert(i); // undefined
    }
  • 相关阅读:
    tomcat日志信息查看
    "".equals(xxx)和xxx.equals("")的区别
    javax.crypto.BadPaddingException: Given final block not properly padded解决方案
    去掉first li 的list图标
    浮动后的 <li> 如何在 <ul> 中居中显示?
    java冒泡排序
    JSP获取网络IP地址
    <%@ include %>导入的文件乱码
    out.print()与response.sendRedirect()
    王爽汇编语言第三版第5章实验4
  • 原文地址:https://www.cnblogs.com/microcosm/p/6985938.html
Copyright © 2011-2022 走看看