码农

JS/ES6新关键字let是否在任何情况下都优于var

2019-05-10  本文已影响0人  潜水的旱鸭子

一、区别

  ES6新版中增加的let有这么几大特性:
    1.不允许变量提升;
    2.同一作用域内不允许重复声明;
    3.暂时性的死区;
    4.块级作用域;

  与let相比老版本中的var声明的变量就显得比较宽松了:
    1.省略不写的时候表示全局变量;
    2.声明的变量会提升到作用域开始的位置;
    3.可以重复声明;
    4.只有全局和局部作用域,除非在闭包环境下,否则不会产生类似块级作用域的效果

二、场景举例

  一般在使用let的时候,除了使我们的语法更严格之外,还利用了块级作用域的特性,在不产生闭包环境的情况下,让要声明的变量成为私有变量,如for循环中的点击事件要访问for循环的计数器i,此时使用let声明计数器,会在for循环中产生一个块级作用域,所有在这个块级作用域中的代码段都可以访问到每次i的值

  而如果用var声明这个计数器的话,就需要一个闭包环境来实现这个操作,那么闭包环境又需要消耗大量的内存。所以在此种情况下更适合使用let



  那什么时候适合使用var而不适合用let呢,目前来看,好像还没有这种情景,几乎所有能用var实现的需求,使用let都能实现,并且代码更规范,语法更严格。而且随着前端行业的发展,ES6的全面推广也是早晚的事,let全面替换掉var也是有可能发生的事
  但是就目前的情况来看,ES6还未全面流行开来,浏览器的兼容也没有完全解决,相应的如let之类ES6中新增的关键字也存在一定的兼容隐患,正如一句话所说:

      新特性一时爽,兼容性火葬场。

三、总结

  let和var的抉择需要视情况而定,并不是所有情况下let都优于var。(如果有兼容问题,let反而会失效或报错)
  那么在项目中如何去选择呢,我认为遵循两个原则就好:
    1.用自己熟悉的
    2.根据公司或项目要求决定


个人见解,不代表官方,如有不同看法,欢迎留言交流,谢谢支持……^ _ ^

上一篇 下一篇

猜你喜欢

热点阅读