ES6 - 常量和块作用域变量

优质
小牛编辑
113浏览
2023-12-01

ES5中的函数本质上是可以在外面“看到”,但不能进入的容器。
在ES6中,var仍然以这种方式工作,使用函数作为容器,但有两种新的方法来声明变量:和let
constlet使用{}块作为容器,故称为“块作用域”。 块作用域在循环期间非常有用。 考虑以下代码:

  1. var i;
  2. for (i = 0; i < 10; i += 1) {
  3. var j = i;
  4. let k = i;
  5. }
  6. console.log(j); // 9

尽管引入块作用域,函数仍然是处理大多数循环的首选机制。

let工作类似var在其数据读/写的意义。 let在用于for循环时也很有用。 例如,不使用let ,以下示例将输出5,5,5,5,5

  1. for(let x=0; x<5; x++) {
  2. setTimeout(()=>console.log(x), 0)
  3. }

此外,const是只读的。一旦const被分配,标识符不能被重新分配。 例如:

只读性质可以用任何对象来演示:

  1. const literal = {};
  2. literal.attribute = 'test'; // fine
  3. literal = []; // error;

但是有两种情况,const不会像你想象的那样工作。

  1. 一个const对象字面量

对象的Const引用

类似上面的代码是使用const引用,下面我们切换到使用let创建源文本(literal)对象。

  1. let person = {
  2. name: 'Tammy'
  3. };
  4. const p = person;
  5. p.name = 'Pushpa'; // OK, name property changed.

标记一个对象的引用为const不会让对象里的属性也为const。