关于闭包取值的问题,代码以格式化
来源:17-1 异步和单线程-什么是异步
meimei1314
2019-10-26
var a = 100;
function F1( ) {
// var a = 200;
return function ( ) {
console.log(a)
}
}
var f1 = F1( );
function F2(fn) {
var a = 300;
fn( );
}
F2(f1); // 100,输出的是100
老师,请问一下,闭包作为参数传递时,查询自由变量a的时候,
第一步,在其定义时父作用域F1中寻找,
第二部,若没有找到,不应该是其参数fn的父作用域F2中寻找么?
请问,为什么最后是在全局作用域中寻找呢?不应该是最后才是在全局作用域中寻找么?
写回答
2回答
-
双越
2019-10-26
F1 是 fn 定义时的作用域,F2 是 fn 执行时的作用域。注意,一个是定义,一个是执行。
而自由变量 a 的查找,只跟定义作用域有关,跟执行作用域无关。
所以,你说的“第二部,若没有找到,不应该是其参数fn的父作用域F2中寻找么?”,是理解错误的。正确的应该是,去 F1 父作用域寻找,即全局作用域。
00 -
双越
2019-10-26
http://coding.imooc.com/learn/questiondetail/148449.html 这也是你提的问题,跟这个问题相同,我在这个问题中回复说让你改一下代码格式,你也没改。直接又重新提问了一个。那我就帮你改了吧。
但学不会 markdown ,以后无论是提问还是写开发文档,都会是一个障碍。还是建议你去学一下,也不难。
另外,对于老师回复的内容,看不明白可以继续追问,我也会继续解答,但是千万不要视而不见或者不理会。
00
相似问题