siv*_*636 4 javascript ecmascript-6
虽然x不是常数,但以下代码如何运行而没有任何错误?
for (const x of [1,2,3]){
console.log(x);
}
Run Code Online (Sandbox Code Playgroud)
它适用于Chrome等兼容浏览器,因为它们在每次迭代时都会创建一个新的,不同的常量变量:
var arr = [];
for (const x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [1,2,3] on Chrome
Run Code Online (Sandbox Code Playgroud)
一些不兼容的浏览器会重用相同的变量:
var arr = [];
for (let x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [3,3,3] on non-compliant browsers
Run Code Online (Sandbox Code Playgroud)
因此,如果在上面的示例中,它们会引发错误const.
运行时语义:ForIn/OfBodyEvaluation说:
- 重复
- 其他
- 断言:lhsKind是lexicalBinding.
- 断言:lhs是ForDeclaration.
- 让iterationEnv为NewDeclarativeEnvironment(oldEnv).
- 对于传递iterationEnv作为参数的lhs执行BindingInstantiation.
所以每次迭代都应该创建一个新的绑定.Chrome是正确的.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |