JavaScript闭包作用域变量问题

 <script>
      function func() {
          // 创建了一个数组
          var fns = new Array();
          // i这个变量是保存在func这个作用域中的
          for (var i = 0; i < 10; i++) {
              // 数组中放的值是一组函数
              fns[i] = function() {
                  return i;
              }
          }
          return fns;
      }
      var fs = func();
      for (var j = 0; j < fs.length; j++) {
          // 此时通过闭包来调用所有函数,当输出i的时候会去上一级的作用域中查找
          // 这个时候i的值已经是10了,所以连续输出10个10
          document.write(fs[j]() + "<br>");
      }
    </script>

在js中当进行函数的调用,会为每一个函数增加一个属性SCOPE,通过这个属性来指向一块内存

这块内存中包含有所有的上下文使用的变量,当在某个函数中调用了新函数之后,新函数依然会有

一个作用域来执行原有的函数的SCOPE和自己新增加的SCOPE,这样就形成了一个链式结构。

这就是js中的作用域链。

你可能感兴趣的:(JavaScript闭包作用域变量问题)