让前端飞Web前端之路前端从入门到放弃

var、let 和 const 区别的实现原理是什么

2019-11-07  本文已影响0人  青山旁小溪边

问题

var、let 和 const 区别的实现原理是什么?

区别

首先先说下三者的区别

  1. var与let是可以声明变量,const不能声明变量,只能声明只读的常量。
  2. var声明的变量不存在块级作用域,他在全局内有效。let与const的声明只在其所在的代码块中有效。
  3. let/const不能在同一个作用域中声明相同变量/常量,var可以多次重复声明。
  4. var存在变量提升,所以var能先使用在声明,但是let const必须先声明再使用。
  5. let/const存在暂时性死区。
var a = 100;
if(1){
    a = 10;
    // 在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,
    // 而这时,还未到声明时候,所以控制台Error:a is not defined
    let a = 1;
}
  1. const声明时必须初始化赋值,一旦声明,其声明赋值的值就不允许改变,更不可以重复声明。

如 const 声明了一个复合类型的常量,其存储的是一个引用地址,不允许改变的是这个地址,而对象本身是可变的。

const a = 100; 
const list = [];
list[0] = 10;
console.log(list);  
// [10] 
const obj = {a:100};
obj.name = 'apple';
obj.a = 10000;
console.log(obj);  
// {a:10000,name:'apple'}

原理

JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。

上一篇 下一篇

猜你喜欢

热点阅读