前言
“爱”曾在落后时代里疯长,像var在全局中横冲直撞。而当先进的光劈下,let提着块级作用域的大刀,将对var的旧情腰斩。在从不停歇时代的洪流下,落后的事物终将被冲进坟墓。
“可还记得,我们共同维护js代码的往日的种种?”
但是,时代变了。
“你,你可还有何话说?”
第一章:孤独与坚守
在遥远的过去,js的世界中只有var一人承担着声明变量的重任,默默地在代码的海洋中漂泊多年。许多年来,他依然坚守在自己的岗位上,为 JavaScript 的发展贡献着自己的力量,等待着那个能与他携手共度难关的伴侣出现。
第二章:新生与相遇
随着es6版本的更新,js的世界迎来了一位新成员let。他的出现像一道曙光,照亮了var孤独的内心。let拥有块级作用域,大大减少了变量被污染的风险,且声明变量不会提升,只能在变量声明之被访问,使得代码的逻辑更清晰,减少了出错的可能性。let的出现,让var看到了让js世界变得更美好的希望。他们之间的相遇,仿佛就是命运的安排。他们彼此欣赏,相互吸引,共同期待着能够携手创建更美好的未来。
第三章:爱与时代、适用or淘汰、var的三宗罪
然而,在他们如胶似漆得相互配合一段时间后,一场变故悄然发生了。一众程序员将let与var团团围住,厉声大喝“删掉var!”、“为了更美好的js世界”、“我们将用更美好的let代替它”。
- 第一罪:先调用后声明,倒反天罡
var你这倒反天罡的特性,非得要“变量提升”,使得变量在被声明前被访问,扰乱了,常理上代码编写的逻辑,大大增加了出错的可能性与代码的复杂性。但是let,从不这样,let声明的变量,必须在声明后才可以访问,比你有条理多了。
console.log(x); //不报错,倒反天罡
var x=1;
console.log(y);//正常报错,符合常理
let y=1;
- 第二罪:重复声明,污染变量
var你十恶不赦,在同一个作用域内居然可以重复声明,使得后面的声明覆盖了前面的,带来了混乱与许多意外的错误。 但是let,从不这样,let在同一作用域下不允许重复声明,比你安全多了。
var x=1;
var x='aaaa';
console.log(x);//输出’aaa‘ ,重复声明污染变量
let a=1;
//let a='aa';//禁止重复声明,更加安全
console.log(a)
3.第三罪: 无块级作用域,落后时代
var,你已经落后了,传统的全局作用域与函数作用域的概念早以不够用。你在for循环中定义一个变量都会,导致它变成一个全局变量,对标识符进行不必要的占用。难道我们写多个for循环需要声明无数个不同的标识符不成?let跟你才不一样,它带来了更先进的块级作用域概念,使得变量作用范围仅在附近代码块,才不会向你一样动不动就变成全局变量呢。
//let实现块级作用域,变量不影响全局,减少声明变量的负担
for(let i=0;i<10;i++){
console.log(i);
}
for(let i=0;i<10;i++){
console.log(i);
}
//var声明变量影响全局,为实现多个for循环,不得不声明多个变量
for(var x=0;x<10;x++)
{
console.log(x);
}
for(var y=0;y<10;y++)
{
console.log(y);
}
let忽然意识到,是啊,时代已经不同了,天下众人苦var缺点久已,它没有块级作用域,它的重复声明不能保护数据的安全性,它声明的变量可维护性太差了。为了“更加美好”的js世界,var在未来肯定是不会有人再去用了。
往日种种
众程序员呐喊道“删了var!”
var大喊道“不是这样的! let你别听他们的,你可还记得我们往日的种种”
“往日,你是说往日”
let沉默不语,想到与var往日共同维护js环境的点点滴滴。脸上逐渐露出两分悲伤,3分愤怒,5分喜悦的痛苦表情。然而大势所趋,时代所向,根本无力改变。
let冷下眼来开口道“你,你可有何话说”
var心如死灰地答道“再无话说”