let、const的区别

let和const都是ES6 新增的变量声明关键字。

let没有变量提升,有TDZ。
const和let一样,没有变量提升,有TDZ。
const声明的是常量,必须初始化,值不能改变。

let和const都是块级作用域。
let和const都不允许重复声明。

let可以不初始化。
const必须初始化。

let的值可以改变。
const的值不能改变,但对象内部可以。

你在用的时候注意这些区别。

Var、Let 和 Const

2 02 3 年,我那个朋友问我,JavaScript里的Var、Let和Const有什么区别。
我给他解释说,Var就像是个老司机,它可以在函数里或者全局里随便跑,没有块级作用域的限制,就像在高速公路上,想怎么开就怎么开。
而且Var还有个特点,就是变量提升,就像是在高速公路上还没建好的地方,可以先开过去,不过那时候车是没油的,就是undefined。

然后是Let,它就像是限速路段,只能在它所在的代码块里跑,出了这个路段就找不到它了。
而且Let有个TDZ,就是暂时性死区,你还没建好路,车就先开过去了,会出事的,会报错。

Const就像是个停车场,只能停一次,一旦停进去,就不能动了,不能重新赋值,也不能再停一次。
不过,如果你停的是对象或数组,你可以在停车场里给它们换个位置,就是修改属性或元素。

作用域上,Var是全局或函数,Let和Const是块级。
重复声明,Var可以,Let和Const不行。
重新赋值,Var和Let可以,Const不行,除非是对象或数组。
变量提升,Var有,Let和Const也有,但Let和Const有TDZ。
初始化要求,Var可以后赋值,Const必须一开始就赋值,Let可以后赋值。

我那个朋友听后点点头,说:“哦,我明白了,这三种变量各有各的规则,用的时候可得小心。
” 我说:“没错,用得好,代码更安全,用不好,可能会出大问题。
” 算了,你看着办吧。

一看就懂的var、let、const三者区别

var、let、const区别啊,说白了就是用起来不一样。

先说var,这玩意儿当年刚学JS的时候都用它。
var声明的变量会"提升",就是不管你在哪儿声明,它都跑到你作用域最上面去了。
比如你在函数里写var a = 1 0;,其实等价于var a; a = 1 0;。
这老容易出bug了,你可能在函数外面用到了a,结果发现它是undefined。
而且var没块级作用域,在if里声明,外面也能用,代码看着就乱。

再说let,这玩意儿是ES6 才出来的。
let有块级作用域,就在你写它的{ }里面。
比如{ let a = 1 0; },出了这个括号就没用了。
let不会"提升",你在用之前必须先声明,不然会报错。
这就好多了,代码不会那么混乱。

最后是const,这也是ES6 的。
const声明的是常量,赋值后就不能改了。
比如const pi = 3 .1 4 ;,你就不能再写pi = 3 .1 5 ;。
const也有块级作用域,跟let一样。
不过const声明的时候必须马上赋值,不然不行。
比如你不能写const a;,必须写const a = 1 0;。

注意一点,const声明对象的时候,你不能把整个对象换掉,但可以改对象里的东西。
比如const obj = { name: 'Bob' }; obj.name = 'Alice';这样是行的,你不能写obj = { name: 'Alice' };。

let和const还有一个"暂时死区"(TDZ),就是你在声明之前用不了的区域。
用var就没有这个问题,var会先变成undefined。
TDZ是个好东西,能逼你早点声明变量,避免很多错误。

总之,现在写JS都用let和const,var基本不用了。
let和const让代码更清晰,不容易出错。