我有一个使用数组的最终值作为默认值的应用程序。我尝试过:
x = [1, 2, 3];
for (var zz of x) {};
console.log(zz); // 3
这正是我想要的,但是我想知道这是否是for ... of循环的定义行为,或者仅仅是实现的偶然结果。我找不到答案,所以希望这里的人能回答这个问题(最好是提供参考)。
说明:到目前为止,答案和评论都有些偏离。上面的示例显示最终值实际上是数组的最后一个值。我的问题是for..of循环的正式定义或正式定义的一部分执行的不确定结果。
答案 0 :(得分:3)
zz
是使用var
声明的,因此它是"hoisted"。这意味着作用域扩展到for
循环之外。
由于将3
分配给了zz
,所以循环结束时zz
将是3
。
答案 1 :(得分:0)
我认为我要寻找的是ECMA spec。用例在13.7.5.11中:
IterationStatement : for ( var ForBinding of AssignmentExpression ) Statement
1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », AssignmentExpression, iterate).
2. Return ? ForIn/OfBodyEvaluation(ForBinding, Statement, keyResult, iterate, varBinding, labelSet).
使用这些参数遍历13.7.5.12-13时,它似乎可以归结为每个人的观察(尽管 quite 可能不明显,如a = 5 :-)。因此,请先向jh314确认。