1. 块级作用域与常量变量(const与let)
(1)let 取代 var var命令存在变量提升效用,let命令没有这个问题。
if (true) {
console.log(x); // ReferenceError
let x = 'hello';
}
如使用var替代let,console.log那一行就不会报错,而会输出undefined,因为变量声明提升到代码块的头部。违反了变量先声明后使用的原则。
2. 全局常量和线程安全(let和const的对比)
let和const,优先使用const,尤其是全局环境,不应设置变量,只应设置常量const
const优于let有几个原因:
- const可提醒阅读程序的人,这个变量不应改变,也防止了无意间修改变量值所导致的错误;
- const比较符合函数式编程思想,运算不改变值,只是新建值,这样也有利于将来的分布式运算;
- Js 编译器会对const进行优化,所以多用const,有利于提高程序的运行效率,let和const的本质区别,其实是编译器内部的处理不同。
// bad
var a = 1, b = 2;
// good
const a = 1;
const b = 2;
// best
const [a, b] = [1, 2];
所有的函数都应该设置为常量。
长远看,Js 可能会有多线程的实现,这时let表示的变量,只应出现在单线程运行的代码中,不能是多线程共享的,这样有利于保证线程安全。