let 和 var声明变量的区别

发布时间 2023-10-19 16:18:42作者: enShine

1、能否重复声明变量

使用var 可以重复声明一个变量,且不会报错,这样极有可能覆盖之前已经存在的变量,但是let重复声明变量时 ,编译时就会提示错误,避免因为变量重复声明而导致的错误,且无法定位到错误原因,这使得在后期代码调试和纠错上,大大的增加了工作难度

let a = 200;
let a= 300;
编译报错

var a = 200;
var a = 300;
编译通过

2、作用域不同

let 是块级作用域,声明的变量只在块级中生效,而var不是块级作用域;代码执行到变量作用域之外以后,就会销毁变量,释放变量占用的内存,let作用域相较于var要小,这就意味着更快的执行速度和较小的占用内存空间

3、是否变量提升

var声明的变量会存在变量提升的问题,而let不会

console.loog(a);
var a = 100;
不会报错,但是会输出undefined;
编译之后执行时等同于:
var a ;
console.log(a);
a = 100;
这种现象就是‘变量提升’;

而用let声明时,如果未声明之前就使用,会报错;

4、是否挂载全局/顶层对象上

使用var声明的变量,默认是挂在顶层的全局对象上,即浏览器的window上;window上过多的挂在对象,会是window对象过于臃肿,降低浏览器的性能;而let声明的变量不会挂载在window上

var aaaa = 100
function bbbb() { console.log('i love you') }

console.log( window.aaaa )  // 输出 100
window.bbbb() // 调用函数, 输出 'i love you'


let aaaa = 100
console.log( window.aaaa ) // undefined

 

注:const 本意是定义常量,即定义赋值以后不能修改的量

const a = 100
a = 200  // 报错