据我所知,对象在
JavaScript中通过引用传递(原语通过值传递?).
var a,b; a = { Foo: "Bar" } b = a; a.Foo = "Other"; console.log(b.Foo); // "Other"
这与数组的工作方式类似但不像我期望的那样工作:
var a,b; a = function(){ return 20; } b = a; a = function(){ return 40; } console.log(b()); // returns 20 ?
我很困惑,因为我认为函数是对象.上面的例子不应该返回40吗?
解决方法
@H_404_13@ 在第一种情况下,a.Foo = …,您正在更改对象中属性的值,由a和b引用.这称为变异对象.但在第二种情况下,您正在引用一个新的函数对象.现在,a和b指的是不同的功能对象.
这就是为什么你在第二种情况下得到20.