我可以信任javascript声明中的执行顺序吗?

时间:2012-08-08 01:40:30

标签: javascript declaration

我想知道其中任何一个是否依赖于未定义的行为,和/或是否可以对其进行调整以便它们不会:

示例1

var str = {
  ver: '1.01',
  verdesc: 'WIP',
  composite: {
    version_block: str.ver + str.verdesc
  }
}

示例2

var str = {
  ver: '1.01',
  verdesc: 'WIP',
},
composite: {
  version_block: str.ver + str.verdesc
};

2 个答案:

答案 0 :(得分:2)

您正在尝试从对象文字本身引用通过对象文字定义的属性。这是不可能的。在评估整个对象文字之后,属性仅分配给str变量。因此,在对象文字中,您不能引用str的属性。

因此,当您将对象文字分配给变量时,

var obj = { ... };

然后,在该对象文字中,您不能完全使用obj引用。在评估对象文字时,obj仍然是undefined,并且只有在对象文字后的已经完全解析和评估,相应的对象 value,并将其分配给obj

var obj = {
    a: 123,
    b: obj.a // this will throw, "obj" is undefined
};
obj.b = obj.a; // this works

答案 1 :(得分:1)

http://jsfiddle.net/kendfrey/XwVFt/

错误信息解释了这一切。

你做不到。在分配变量之前,无法访问变量的属性,在创建整个对象之后发生。

您可以通过分配对象来解决此问题,然后然后设置其属性。

var str = { };
str.ver = '1.01';
str.verdesc = 'WIP';
str.composite = {
  version_block: str.ver + str.verdesc
}