結果は Z ですが、少しわかりにくいです。コンソールの出力例は次のとおりです:
その理由は実はとても簡単で、問題は for ループにあります
ここでの最後のキー === 'z'、および他の属性の結果は params[key] を返します。これは params['z'] です
これはオブジェクトのコピー関数です。元のオブジェクトとの唯一の違いは、クロージャのため、コピーされたオブジェクト a の属性がすべて z であることです。 = { リーリー
クロージャを作成するか、letを使用します
またはvarキーをletキーに変更します
リーリー
こちら、Object.defineProperty(this, key, {})这里的key是立即读取使用的,所以是预期行为x,y,z
Object.defineProperty(this, key, {})
key
x,y,z
この関数は 将来のある時点で実行されるので、実行時に最後の key值,即z を読み取ります。これは古典的なクロージャ問題と同じです。
z
印刷されるものはすべて 5 です。
その理由は実はとても簡単で、問題は for ループにあります
リーリーここでの最後のキー === 'z'、および他の属性の結果は params[key] を返します。これは params['z'] です
これはオブジェクトのコピー関数です。元のオブジェクトとの唯一の違いは、クロージャのため、コピーされたオブジェクト a の属性がすべて z であることです。 = {
}リーリー
クロージャを作成するか、letを使用します
リーリーまたはvarキーをletキーに変更します
リーリー
こちら、
リーリーObject.defineProperty(this, key, {})
这里的key
是立即读取使用的,所以是预期行为x,y,z
この関数は 将来のある時点で実行されるので、実行時に最後の
リーリーkey
值,即z
を読み取ります。これは古典的なクロージャ問題と同じです。印刷されるものはすべて 5 です。