我是js的新手。让我用几个例子来说明我的问题。
代码 1
var temp = { key: "value" };
var data = ["v1", "v2"];
var result = [];
for (var i in data) {
var newdata = temp; /** Note here! **/
newdata.key = data[i];
result.push(newdata);
}
console.log(result);
// [ { key: 'v2' }, { key: 'v2' } ]
这里result
出乎意料。
代码 2
var temp = { key: "value" };
var data = ["v1", "v2"];
var result = [];
for (var i in data) {
var newdata = { key: "value" }; /* Note here! */
newdata.key = data[i];
result.push(newdata);
}
console.log(result);
// [ { key: 'v1' }, { key: 'v2' } ]
现在这result
就是我想要的。
它看起来像 Python 中的名称绑定操作。但我google了很多,无法得到满意的答案。所以我不得不求助于stackoverflow。
我的问题:
JS有没有类似Python的名字绑定操作?如果不是,为什么这两段代码会得到不同的结果?
[编辑]
我知道C++ 中的引用和 Python 中的名称绑定。而且我也知道这两者之间的区别。
我唯一感到困惑的是:在 JS 中,它是引用还是名称绑定?或者是其他东西?
感谢所有评论,我完全理解它与name binding而不是reference相似。(因为我找不到任何按钮来关闭这个问题,所以我在这里添加了答案。)