ES6之编程风格

1.块级作用域

1.1 、let取代var

ES6提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。

if(true){
   let x = 'hello';
}
for (let i = 0;i < 10;i++) {
   console.log(i)
}

上面的代码如果用var替代let,实际上就声明了两个全局变量,这显然不是本意。变量应该只在其声明的代码块有效,var命令做不到这一点。

if(true){
   console.log(x)
  let x = 'hello'
}

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

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

1.2 全局常量和线程安全、

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

const优于let有几个原因。一个是const可以提醒阅读程序的人,这个变量不应该改变,另一个const比较符合函数式编程思想,运算不改变值,只是新建值,而且这样有利于将来的分布式运算,最后一个原因是JavaScript编译器会对const进行优化,所以多使用const,有利于提高程序的运行效率,也就是说let和const的本质区别,其实是编译器内部的处理不同。

// bad
var a =1,b=2,c3;
// good
const a = 1;
const b = 2;
const c = 3;
// beset
const [a,b,c] = [1,2,3]

const声明常量还有两个好处,一是阅读代码的人立刻会意识到不该修改这个值,而是防止了无意间修改变量值所导致的错误。

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

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

声明:文章系参考与借鉴于阮一峰老师的ES6相关教程。

ES6之编程风格

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

滚动到顶部