let 和 const

时间:2021-03-16 02:04:51

let命令

1.let命令只在所在的代码快内有效

{
let a = 'hello world'
console.log(a) //hello world
}
console.log(a) //Uncaught ReferenceError: a is not defined

2.let 声明的变量不可重复定义

{
let a = 0;
let a = 'hello world'; //Uncaught SyntaxError: Identifier 'a' has already been declared重复定义变量
}

3.不存在变量提升,必须先声明后使用

console.log(aa); //Uncaught ReferenceError: aa is not defined
let aa = '11';

4.for循环中let和var的区别

for(var i=0; i<10; i++){

    }
console.log(i); //10
for(let i=0; i<10; i++){ //此处let声明的i是父作用域
let i = 'abc'; //内部let声明的是子作用域,暂时性死区
console.log(i); //abc
}
console.log(i); // Uncaught ReferenceError: i is not defined

“暂时性死区” 只要块级作用域内存在let命令,它所声明的这个变量就不在受外部的影响,本质是只要进入当前作用域,所要使用的变量就已经存在,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

外层作用域无法读取内层作用域的变量

内层作用域可以定义外层作用域的同名变量

const命令

1.const声明一个只读的常量,一旦声明,就必须立即初始化,常量的值就不能改变。

const a = 'hello world';
console.log(a); // hello world
a = 123; //Uncaught TypeError: Assignment to constant variable.改变常量的值会报错

2.const作用域与let命令相同,只在声明所在的块级作用域内有效。

3.不可重复声明

本质: const实际上保证的并不是变量的值不的改动,而是变量指向的那个内存地址不得改动

  • 简单类型的数据(数值,字符,布尔),值就是保存在变量指向的内存地址中。
  • 复合类型的数据(数组,对象),变量指向的内存地址保存的知识一个指针。