let和const

Let :不存在变量提升的

function add(){
  for (let i=0;i<5;i++){
    console.log(i)
  }
  console.log(i)
}
function add() {
  for (var _i = 0; _i < 5; _i++) {
    console.log(_i);
  }

  console.log(i);
}

暂时性死区:使用let命令声明变量之前,该变量都是不可用的。

const :声明一个只读的常量。一旦声明,常量的值就不能改变

Const:只声明不赋值,就会报错。

function add(){
  for (const i=0;i<5;i++){
    console.log(i)
  }
  console.log(i)
}





"use strict";

function _readOnlyError(name) { throw new Error("\"" + name + "\" is read-only"); }

function add() {
  for (var _i = 0; _i < 5; _readOnlyError("i"), _i++) {
    console.log(_i);  // 0
  }

  console.log(i);
}
//VM445:1 Uncaught Error: "i" is read-only
    at _readOnlyError (<anonymous>:1:39)
    at add (<anonymous>:4:28)
    at <anonymous>:10:1

Const 实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

        const foo = {
           
        };
        foo.my = 123
        console.log(foo.my)
        foo.my =34;
        console.log(foo.my)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容