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

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这个问题我抛开你定义的作用域,也先不考虑ES6的事情,解释一下你这个问题:
这里面
var i = 0这句话,实际上i的作用域在作用域A中,和j,arr一样。(for循环不能创造新的作用域。)
而里面的匿名函数,是可以访问上级的作用域(也就是作用域A)中的变量i的,所以最后打印出来的肯定都是上级的i,即最后的10
关于匿名函数作用域中的j,实际上根本没有这个变量(因为没有声明,也没有“继承”),个人见解...研究好后再来修改答案
test();这句话,运行的时候是在作用域A中,console.log(arr[a]());而这句话运行的时候是在匿名函数的作用域中(作用域A的子作用域B)你这段小代码里面,并没有涉及到全局作用域访问局部作用域变量的事情