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 での名前バインディング操作のように見えます。しかし、私はたくさんググって、満足のいく答えを得ることができませんでした. そのため、スタックオーバーフローに助けを求める必要があります。

私の質問:

JS には Python と同様の名前バインディング操作がありますか? そうでない場合、これら 2 つのコードで異なる結果が得られるのはなぜですか?

[編集]

C++ での参照と、Pythonでの名前バインディングについて知っています。また、この 2 つの違いについても認識しています。

私が混乱した唯一のことは、JSでは、参照または名前バインディングですか? または、他の何か?

すべてのコメントのおかげで、参照ではなく名前バインディングに似ていることが完全にわかりました。(この質問を閉じるボタンが見つからないので、ここに回答を追加します。)

4

0 に答える 0