例如:
var f=function(str){
console.log(str);
return str;
};
var obj={
a:f('value A'),
b:f('value B'),
};
//some other code

是否保证
value A
value B
而不是
value B
value A
打印?
注意:我询问f()的执行顺序,而不是Object.keys(obj)的键顺序。
答案 0 :(得分:1)
尽管这显然是Does JavaScript Guarantee Object Property Order?的重复,但我还是会继续回答。
您的"无序的属性集合中有零保证"。但是,对于Javascript的现代实现,您可以预期属性通常按照您定义的顺序排列。
只要预期的顺序是可取的,但并不重要,在大多数情况下,假设它们是有序的是合理的。但如果您的业务逻辑依赖于该订单得到保证,那么您肯定需要重新考虑您的策略。
好。我现在看到你实际上在问什么。在这个特定的背景下,答案是"是和否#34;。
在定义对象时,会静态调用您的函数。因此,函数定义属性b
将始终在函数定义属性console.log
之前调用。
但是,value A
是一个异步函数,您不能依赖它来记录value B
之前记录{{1}}