• js中的块作用域


    今天我们来一起研究下JavaScript中的变量作用域问题,话不多说,直接上代码。

    1     <script type="text/javascript">
    2         (function(){
    3             for(var i = 0; i < 5; i++){
    4                 console.log(i);
    5             }
    6             console.log(i);
    7         })()
    8     </script>

    这是一个很简单的for循环,打印出i的值,就是循环的次数。在一些高级语言中,比如说java,c,c++等,结果会是0,1,2,3,4,然后运行到第六行的时候就会报错了。但是在JavaScript中却是有点不一样的,运行结果如下。

    多出了一个5,为什么会这样呢?原因是这样的,因为JavaScript中是没有块级作用域这个概念的,所以在循环执行完毕后,i在当前方法内还是有效的,因此执行完最后一次++后,i的值就变成了5。

    那么我们有没有什么方法可以让JavaScript像高级语言中一样有块级作用域呢?方法是有的,代码如下:

     1     <script type="text/javascript">
     2         (function(){
     3             (function(){
     4                 for(var i = 0; i < 5; i++){
     5                     console.log(i);
     6                 }
     7             })()
     8             console.log(i);
     9         })()
    10     </script>

    输出的结果是这样的,

    我们可以看到i is not defined。这说明现在i已经不存在了。分析一下原因,(function(){})()这种写法叫作立即执行函数,在这个函数内部的function拥有自己的作用域。因此,在循环完成后,再去访问i就会产生如上的报错信息了。

    欢迎交流,QQ: 997494167
  • 相关阅读:
    bzoj1218 本来dp 但是数据弱 枚举可过
    bzoj1816二分答案 扑克牌
    bzoj2748 水dp
    最长上升子序列(nlog n)
    bzoj1798线段树。。调的要死
    HTML5 移动开发 (HTML5标签和属性)
    关于全屏布局
    关于z-index这个层级的问题
    面板数据模型
    竞争模型
  • 原文地址:https://www.cnblogs.com/olivers/p/5288318.html
Copyright © 2020-2023  润新知