let and const
很多时候我们因为对未知的恐惧,放弃了很多,但是如果勇敢的迈出那步,可能会发现,被你所恐惧的未知,也许时美好的。
先讲一个悲伤的故事
未来var 可能将会被 let 替代了,说实在的,大学学的是计算机,但是大学四年写的代码了了无几,那时候对写代码正的很害怕,为什么呢?因为不明白,为什么不明白呢?因为懒,很多计算机最基础的东西自己都没看,每天听老师讲的云里雾里,印象最深的是,大一学C语言,涉及到命名空间这样的概念,不明白,大一上完了,也不明白为什么要有命名空间。
为什么要有命名空间,当你在写css的时候给类命名的时候,或许你会有一丝的感悟,所有既定的方案一定都是为了解决某个蛋疼的问题而出现的。
let 和 const 的出现,一定的程度上解决了很多的问题,也在向一个健全的语言迈出坚实的一步,ES6的出现都是为了弥补其匆匆出生,而带来的一些先天性的不足。
但仔细想想,我确是因为js可以先使用后声明而喜欢上它的,虽然我现在已经不这么干了,js被称为玩具语言,是否也说明其可玩性在一大波的编程语言中的可玩性比较的高。
如果js继续使用var会发生的事
其实也不是继续使用,原来就会发生的,而这些问题很多的时候会出现在你的面试题中,先看下面的一段代码:
面对这样的事,很难解释,for循环中使用了var,这回在for所在的代码执行的环境中增加一个变量,是的这个i它越狱了,可能在不经意见导致了变量污染。
那么上面的这段代码可以理解为这样:
那么你应该就不难理解这段2段代码了:
第一段代码console.log(i);这段代等待了1秒钟,可它不知道的是,在这一秒中的时间内,很多事情发生了变化,i已不是1秒前的那个i,"怀旧空吟闻笛赋 到乡翻似烂柯人"。
let 和 const的降临
let的出现带来了块级作用域,在下面的这段代码中:
你会看到输出如你所愿,至于为什么会这样,可以先参考以下以下的代码:
可以理解为在for循环中是有2个作用域的,一个是在小括号当中,一个是在大括号当中,小括号中的i是会变的,但是对于大括号而言,每次执行代码,因为小括号中的i在变化,所已传入的参数在变化,每次执行大括号的中的代码的时候,是在一个新的作用域中进行执行的,每个新的作用域中的i都不同,而不是像之前那样公用的父级作用域中的i。
为了标题而写的const
const 其实在我目前的代码中应用的已经很多了,主要是声明一些不会改变的常量,一些项目中用到的配置参数也是用const进行声明的,需要注意的是: const 、let 声明后需赋值; const 声明的值不可修改; 都不存在变量提升(不能先上船后补票了); 都不存在重复赋值;
最后更新于