ECMAScript 6.0 作用域

2019-11-04  本文已影响0人  张思学

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 声明在块作用域以内出了块作用域是不存在的
}
上一篇 下一篇

猜你喜欢

热点阅读