ES6中对作用域有了一个明确的界限,作用域指的是“块”作用域
// ES5 中作用域
const callbacks = []
for (var i = 0; i <= 2; i++) {
callbacks[i] = function() {
return i * 2
}
}
console.table([
callbacks[0](),
callbacks[1](),
callbacks[2](),
])
/* 打印结果: value都是6
* 为什么会是三个6,因为for里面用的是var声明的变量
* var是全局变量,这里面会存在一个变量提升,var i 不在循环之内
*/
//ES6
const callbacks2 = []
for (let j = 0; j <= 2; j++) {
callbacks2[j] = function() {
return j * 2
}
}
console.table([
callbacks2[0](),
callbacks2[1](),
callbacks2[2](),
])
/* 打印结果: value: 0、2、4
* 值是正常的,这里接触到let, let 声明的变量只在所在的代码块内有效。
* 代码块就是{....},它会把值保存下来供{}内的代码使用
用 const 来声明变量,更清晰的理解块作用域
{
const a = 1
console.log(a) //打印结果:1
//consot a = 2 报错它会告诉你a是只读的
{
const a = 2
console.log(a) //打印结果: 2
const b = 3
}
console.log(b) //打印结果:空,没有值,因为 const b 声明在块作用域以内出了块作用域是不存在的
}
网友评论