ES6中letconst区别保证看完不后悔,印象还深刻

Posted 水香木鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6中letconst区别保证看完不后悔,印象还深刻相关的知识,希望对你有一定的参考价值。


(1)let 取代 var

ES6 提出了两个新的声明变量的命令:let和const。

其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。

'use strict';

if (true) 
  let x = 'hello';


for (let i = 0; i < 10; i++) 
  console.log(i);

上面代码如果用var替代let,实际上就声明了两个全局变量,这显然不是本意。

变量应该只在其声明的代码块内有效,var命令做不到这一点。

var命令存在变量提升效用let命令没有这个问题。

'use strict';

if (true) 
  console.log(x); // ReferenceError
  let x = 'hello';

上面代码如果使用var替代let,console.log那一行就不会报错,而是会输出undefined,因为变量声明提升到代码块的头部。

这违反了变量先声明后使用的原则。

所以,建议不再使用var命令,而是使用let命令取代。

(2)全局常量和线程安全

let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。

const优于let有几个原因。

一个是const可以提醒阅读程序的人,这个变量不应该改变;

另一个是const比较符合函数式编程思想,运算不改变值,只是新建值,而且这样也有利于将来的分布式运算;

最后一个原因是javascript 编译器会对const进行优化,所以多使用const有利于提高程序的运行效率,也就是说let和const的本质区别,其实是编译器内部的处理不同。

// bad
var a = 1, b = 2, c = 3;

// good
const a = 1;
const b = 2;
const c = 3;

// best
const [a, b, c] = [1, 2, 3];

const声明常量还有两个好处:

  • 一是阅读代码的人立刻会意识到不应该修改这个值
  • 二是防止了无意间修改变量值所导致的错误。

所有的函数都应该设置为常量。

长远来看,JavaScript 可能会有多线程的实现(比如 Intel 公司的 River Trail 那一类的项目),这时let表示的变量,只应出现在单线程运行的代码中,不能是多线程共享的,这样有利于保证线程安全。


以上是关于ES6中letconst区别保证看完不后悔,印象还深刻的主要内容,如果未能解决你的问题,请参考以下文章

分布式架构演进与图解,看完不懂的,说明你还不到火候啊!

letconst和var的区别(涉及块级作用域)

手把手教你做系统权限设计,看完不要说还不会

ES6 基础 一

ES6基础之letconst

❤『面试知识集锦100篇』3.mysql篇丨mysql基础知识和面试真题,看完不收藏算我输!!