众所周知(或许并不),ES6 为 JS 添加了一个新的关键字
let
,其作用和var
基本相同。 但既然是基本 相同,那自然有不同。不过鉴于网上已经有太多的说明来介绍两者间的区别,甚至MDN上就有类似的文章,于是今天我也不说两者的异同,就来说说自己对这两者的看法吧。
let
和var
都是用于声明变量的。有人问过我,var
比let
有哪些优势。我想了想,也就想到更通用这一个优点,var
可以无缝编译成let
,而反之却不能。
就let
和var
该用哪个这个问题而言,我支持,且无条件支持let
全面取代var
。虽然通过var
可以使用一些 hack 手段来执行一些偏方,但就我来说,我并不喜欢这些偏方,感觉剑走偏锋,不是正道。而且既然是偏方,也就说明其只用于解决一些目前解决不了的问题的时候才会较为有效。
let
相比var
更严谨,更带来了 java 、c++ 程序员早就习以为常的块级作用域等新特性。这些特性,对于原生JS程序员 来说,可能很陌生,所以才会诞生“暂时性死区(temporal dead zone)”这么个词。
但这对 Java 程序员来说,难道不是理所当然么?谁见过变量在定义之前就能用的?而且这样做的本质,是更好的编程习惯。而且有谁会在教写代码的时候说,变量可以定义在实现之前的?所以说,我严重怀疑哪怕是现在的 js程序 ,直接把var
全文替换成let
,出错的概率也应该不大。除非真有人写代码的时候不注意块级作用域乱来的。
毕竟人是要进步的,在知道var
有各种因为历史原因造成的问题,而在提出了let
这个解决方案后还坚持用var
的,我不知道该如何评价。