-2
var s1 = {
a: 1,
b: s1.a
};
alert(s1.b); // Uncaught TypeError: Cannot read property 'a' of undefined
任何人都可以揭示JavaScript引擎的爲什麼是這種情況的內部工作燈?
目前我被迫使用:
var s2 = {
a: {
a: 1
},
b: {
a: function() { return s2.a.a}
}
};
alert(s2.b.a()); // 1
這有沒有關係如何「引擎創建變量」。而只是語言如何工作。在這種情況下,不重要的是,在右邊表達式被評估之後,對變量的賦值只發生**。 (除非's1'已經被賦值,否則這將導致不同的錯誤。在新的控制檯中再次運行它以追蹤「核心」問題。) – user2864740 2014-10-12 09:58:59
關鍵部分是對象字面值 - 表達式右首先將分配標誌評估爲整體。它非常有意義;根據定義,對象文字是原子結構。 – raina77ow 2014-10-12 10:01:16
這個問題在SO中被問過幾十次,無論是這個變體還是'b:this.a'變體。 – 2014-10-12 12:12:10