簡體   English   中英

Javascript:了解函數中包含的變量

[英]Javascript: Understanding variables wrapped in functions

試圖圍繞Javascript范圍,尋找某人解釋下面發生的事情。 希望它不會幫助我...

var foo = {
  bar: {}
};
(function(foo, bar) {
  foo.bar = 'a';
  bar = 'b';

}(foo, foo.bar))

console.log(foo.bar) // prints 'a', not 'b', how come? 

您定義了兩個變量:

function(foo, bar)

您將兩個值傳遞給它們:

}(foo, foo.bar))

foo的值是對象的引用(該對象具有屬性bar其值是對不同對象的引用)

變量bar的值是對第二個對象的引用。

foo.bar = 'a';

使用字符串'a'覆蓋第一個對象的bar屬性。 foo.bar不再是對第二個對象的引用。 bar的值仍然是對第二個對象的引用。

bar = 'b';

用字符串'b'覆蓋本地bar變量。 現在沒有對第二個對象的引用。 第二個對象將被垃圾收集。

console.log(foo.bar)

您輸出foo值作為引用的對象的bar屬性的值。 這是'a'因為您在函數中修改了該屬性的值。

foo是一個對象,通過引用傳遞。 bar按值傳遞。 bar被覆蓋時,它會失去與foo.bar的關系。 因此, foo.bar是“a”,這是它在函數中設置的內容。

var foo = {
  bar: {}
};
(function(foo, bar) {
    // foo is {bar:{}}
    // bar is {}
  foo.bar = 'a';
    // now foo is {bar:'a'}
  bar = 'b';
    // now bar is 'b'
    // bar has no relation to foo.bar anymore

}(foo, foo.bar))

console.log(foo.bar) // prints 'a', not 'b', how come? 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM