在执行上下文创建阶段,我们创建可变环境。 如何在es6中通过函数内部的块作用域创建变量环境?
ES5语法:
function functionScoping() {
var arr = [];
for(var i = 0; i<3;i++) {
arr.push(function() {
console.log(i)
})
}
return arr;
}
const fnScope = functionScoping()
fnScope[0]()
fnScope[1]()
fnScope[2]()
输出:3 3 3
使用ES6块作用域:
function functionScoping() {
var arr = [];
for(let i = 0; i<3;i++) {
arr.push(function() {
console.log(i)
})
}
return arr;
}
const fnScope = functionScoping()
fnScope[0]()
fnScope[1]()
fnScope[2]()
输出:0 1 2
在执行上下文创建阶段,for循环之后的i
的值存储为3
,因此ES5的输出为3
。
关于ES6,执行上下文的行为方式。它会分别存储每个块变量吗?
仍然,这些函数用于创建执行上下文。但是,不知道函数内部的块作用域如何在可变环境创建中执行。谁能给我一些启示?