for ... of循环完成后,变量的值是多少?

时间:2018-08-19 22:21:32

标签: javascript

我有一个使用数组的最终值作为默认值的应用程序。我尝试过:

x = [1, 2, 3];
for (var zz of x) {};
console.log(zz);   // 3

这正是我想要的,但是我想知道这是否是for ... of循环的定义行为,或者仅仅是实现的偶然结果。我找不到答案,所以希望这里的人能回答这个问题(最好是提供参考)。

说明:到目前为止,答案和评论都有些偏离。上面的示例显示最终值实际上是数组的最后一个值。我的问题是for..of循环的正式定义或正式定义的一部分执行的不确定结果。

2 个答案:

答案 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确认。