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