非常不明白为什么上述代码会输出‘x’。首先iife应该不存在变量提升,变量提升只存在于函数声明,而不是函数表达式。其次在:(function (foo) {console.log(foo) // x
foo = 'y';})(foo);确实能取到外部的foo值。但是为什么最后return foo值还是没有变 求大佬解答!!
5 回答
UYOU
TA贡献1878条经验 获得超4个赞
(function(){
var foo = "x";
(function(a){
a="y";
})(foo);
return foo;
})();
你那个等价于这个 这样应该易懂一点吧
BIG阳
TA贡献1859条经验 获得超6个赞
首先,显然、执行外层IIFE过程中里面的IIFE会执行(且没有return)、执行完后销毁,虽然里面IIFE能读到外面的foo,且能改变foo的值,但随后即销毁,不污染外层IIFE中的foo。
接着,外层IIFE继续(foo是‘x’),并因为return foo,返回'x'。
德玛西亚99
TA贡献1770条经验 获得超3个赞
这里是值传递(也就是把x传进去了,而不是把foo变量传进去),如果foo指向一个对象,那就是引用传递,在里面修改foo,会作用到外面
(function(){
var foo = {a:1,b:"s"};
(function (foo) {
foo.a = 'y';
})(foo);
return foo;
})();
//{a:"y",b:"s"}
添加回答
举报
0/150
提交
取消