-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