<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中的作用域链。