(function(fn){
var able=123;
function tmp(){
fn()
};
return tmp();
})(function(){alert(able)});报错;但是:(function(fn){
var able=123;
function tmp(){
(function(){
alert(able)
})();
};
return tmp()
})();弹出123 这是为什么??
1 回答

慕标琳琳
TA贡献1830条经验 获得超9个赞
(function(fn){ var able=123; function tmp(){ fn() }; return tmp();})( //这段代码相当于一个参数,当它直接调用,会默认为全局作用域,但是全局并没用定义,所以会报错 // Uncaught ReferenceError: able is not defined(作用域的错误) function(){alert(able)} );
在全局作用域定义一个able = 33, 结果会弹出33。你可以试一下
var able = 33; (function(fn){ var able=123; function tmp(){ fn() }; return tmp(); })(//这段代码相当于一个参数,当它直接调用,会默认为全局作用域,但是全局并没用定义,所以会报错 // Uncaught ReferenceError: able is not defined(作用域的错误)function(){alert(able)} );
//这个并没有传递参数,直接调用(function(fn){var able=123;function tmp(){ (function(){ //这里是闭包能访问外层作用域 即able = 123,所以可以弹出 alert(able) })(); };return tmp() })();
建议看看《你不在知道的js》对闭包作用域的解惑。
添加回答
举报
0/150
提交
取消