求指点,关于闭包的作用域问题,是这样的,在执行这段代码的时候,我在google上
监测变量,发现一个问题,
for(var a = 0;a < 10;a++){ console.log(arr[a]());}
在下面这个闭包(作用域2)被调用的时候可以访问到他的包含作用域test(作用域1)的变量i以及全局作用域(作用域3),但是如果直接在运行时访问变量j的话是访问不到的,js引擎在解析到闭包中i变量的时候发生了什么事情,
function (){return i;}
<script>
function test(){
//1 块作用域1 变量 i,arr
var arr = [];
var j = 0;
for(var i = 0;i < 10;i++){
//arr[i] 存储的是匿名方法的引用,没有立刻执行
arr[i] = function(){ //作用域2
return i; //breakpoint
};
}
// i = 10 arr[i] = function(){return i;}
for(var a = 0;a < 10;a++){
console.log(arr[a]());
}
}
//作用域3 全局作用域
test()
var k =1;
</script>
Q:执行作用域3的时候为什么能访问到作用域2(test 作用域)中的 i,
作用域1(全局作用域)中的k,为什么不能访问到作用域2中的j ?
慕码人8056858
相关分类