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