(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
提交
取消
