阅读 88

let,var,const比较

let,var,const比较
类型 是否变量提升 是否挂在window上 作用域 是否可以重复定义 是否可以多次赋值
var 只有函数作用域 可以 可以
let 所有块级作用域 同一作用域内不可以定义同名变量,不同作用域内可以 可以
const 所有块级作用域 同上 不可以,定义变量之后就不可再赋值

总结:

  • var只有函数作用域,可以重复定义,赋值
  • let和const是块级作用域,所有{}都是作用域,在{}内部定义的变量,外面访问不到,并且不同作用域之间可以定义同名变量
  • 因为let,const不会变量提升,所以在调用他们之前必须先定义。eg:
a = 1; // 错误,因为没有变量提升,所以在调用它之前必须先定义
let a;
复制代码
  • let,const他们是脱离window的,eg:
let a = '123';
window.a // undefined
复制代码
  • const定义的变量一旦定义了就没办法改变其值,但是对于对象和数组这类引用变量,不可以改变指引的对象,但是其值可以改变。 eg:
const a = {};
a.name = 'BaoMax'; // 正确
a = { name: 'BaoMax' }; // 错误
const arr = [];
arr.push(1); // 正确
arr = [1]; // 错误
复制代码

如果想要引用对象的值可以使用:Object.freeze(obj)

Object.freeze(obj): MDN

入参:需要被冻结的对象 出参:被冻结的对象

方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象

文章分类
前端
文章标签