[英]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.