0

我是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相似。(因为我找不到任何按钮来关闭这个问题,所以我在这里添加了答案。)

4

0 回答 0