js中什么是变量提升

好的,关于变量提升我有话要说。
记得那年在公司写过一个前端项目。
那时候我还在用var;但他却遇到了一个大坑。

当时我写了一个函数,它包含一个变量。
当函数中打印一个时。
结果发现是未定义的。
当时我还是很惊讶的。
这个变量已经被赋值了,对吧?后来查了资料,原来是增量变化惹的祸。
var 声明的变量将被提升到作用域的顶部。
赋值操作不会被推广;所以我写的a=1 其实是晋升到了顶层,但是因为没有赋值,所以打印为未赋值。

当时我很生气。
后来项目比较仓促,没时间详细研究,所以现在就改了。
然而,这个漏洞给我留下了深刻的印象,让我意识到新代码中应该尽可能避免变量提升。

然后我换了工作并开始使用let和const。
这两个都是块级境界,不会升级,所以比较安全。
一次,请记住,您可以在闭包内部和闭包外部声明变量ReferenceError 会在输入时直接抛出。
这比使用 var 时要好得多;至少不会有随机的套装。

归根结底,变量提升有时可以简化代码结构,但如果做得不好,也会带来问题。
现在在新代码中,我尝试使用 let 和 const 来使代码更干净并且不易出错。
耶,说到这个编程技巧,我学会了爬悬崖,慢慢来。

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

哈,你这个问题问得很好。
我们来谈谈 JavaScript 中的这些关键字。

上周一位客户问我 var、let 和 const 之间有什么区别。
我向他详细解释了这一点。
我们先来说说var。
这个产品看起来有点像老式自行车。
你可以把它开到任何地方,但有时刹车会突然失灵。
因为var声明的变量会被带到作用域的开头,就像自行车的刹车线拉得太长一样,有时即使踩刹车也不起作用。
而且 var 没有块级范围,这意味着您的自行车可以不受任何限制地在整个城市中移动。

然后是let,它就像一辆电动汽车,只能在某些地方行驶,并且刹车灵敏。
let 声明的变量具有块作用域,这意味着它只能在代码块内有效,就像电动汽车只能在指定的充电区域内充电一样。
而且let不能在同一个作用域内重复声明,这就避免了名称冲突的问题。

最后一个是const,类似于摩托车。
一旦发射,它就不能随意改变速度或方向。
一旦声明的 const 变量被赋值,就无法更改,从而确保数据保持不可变。
然而,声明为常量的对象的属性是可以改变的,就像你可以改变摩托车的挡风玻璃,但不能改变汽车的挡风玻璃一样。

还有TDZ的概念,即临时死区。
用let和const声明的变量在声明之前并不存在,就像还没有注册的摩托车一样。
想要在路上随便开着它是不可能的。
一旦完成登记,即申报,您就可以合法上路了。

总之,这三类变量关键字各有特点,开发者应根据实际情况选择合适的使用。
不管怎样,这取决于你,正确使用它会让你感觉更舒服写作代码。
我现在还在思考这个问题,以后遇到类似问题再详细讨论。