5 回答

TA貢獻1878條經(jīng)驗 獲得超4個贊
(function(){
var foo = "x";
(function(a){
a="y";
})(foo);
return foo;
})();
你那個等價于這個 這樣應該易懂一點吧

TA貢獻1801條經(jīng)驗 獲得超8個贊
js函數(shù)重新開辟新內(nèi)存棧,不管是不是立即執(zhí)行函數(shù)。 那么函數(shù)形參 你這里取名字為foo 。
執(zhí)行的時候 外面foo的值傳入 ,注意不是引用,了解了吧

TA貢獻1859條經(jīng)驗 獲得超6個贊
首先,顯然、執(zhí)行外層IIFE過程中里面的IIFE會執(zhí)行(且沒有return)、執(zhí)行完后銷毀,雖然里面IIFE能讀到外面的foo,且能改變foo的值,但隨后即銷毀,不污染外層IIFE中的foo。
接著,外層IIFE繼續(xù)(foo是‘x’),并因為return foo,返回'x'。

TA貢獻1770條經(jīng)驗 獲得超3個贊
這里是值傳遞(也就是把x傳進去了,而不是把foo變量傳進去),如果foo指向一個對象,那就是引用傳遞,在里面修改foo,會作用到外面
(function(){
var foo = {a:1,b:"s"};
(function (foo) {
foo.a = 'y';
})(foo);
return foo;
})();
//{a:"y",b:"s"}
添加回答
舉報