试图围绕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?
Run Code Online (Sandbox Code Playgroud)
您定义了两个变量:
function(foo, bar)
Run Code Online (Sandbox Code Playgroud)
您将两个值传递给它们:
}(foo, foo.bar))
Run Code Online (Sandbox Code Playgroud)
值foo是对象的引用(该对象具有一个属性,bar其值是对不同对象的引用)
变量的值bar是对第二个对象的引用.
foo.bar = 'a';
Run Code Online (Sandbox Code Playgroud)
bar用字符串覆盖第一个对象的属性'a'.foo.bar不再是对第二个对象的引用.值bar仍然是对第二个对象的引用.
bar = 'b';
Run Code Online (Sandbox Code Playgroud)
bar用字符串覆盖局部变量'b'.现在没有对第二个对象的引用.第二个对象将被垃圾收集.
console.log(foo.bar)
Run Code Online (Sandbox Code Playgroud)
您输出bar对象的属性值,该值foo是作为引用的值.这是'a'因为您在函数中修改了该属性的值.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |