建议使用的优先级:const > let > var
ES6 提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。
1.var、let、const的区别
var 定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
let 定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
2.let与var使用建议
在使用var去声明一个循环变量的时候,经常会遇到一个闭包的问题:
var arr = [];
for(var i=0;i<3;i++){
arr.push(function(){
console.log(i);
});
}
arr.forEach(function(val,i){
val();// 3 3 3
});
上面打印出来的都是3,如果用let去声明i,结果就是正确的:
var arr = [];
for(let i=0;i<3;i++){
arr.push(function(){
console.log(i);
});
}
arr.forEach(function(val,i){
val();// 0 1 2
});
3.const与let使用建议
在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。
const优于let有几个原因:
1. const可以提醒阅读程序的人,这个变量不应该改变;
2. const比较符合函数式编程思想,运算不改变值,只是新建值,而且这样也有利于将来的分布式运算;
3. 最后一个原因是 JavaScript 编译器会对const进行优化,所以多使用const,有利于提高程序的运行效率,也就是说let和const的本质区别,其实是编译器内部的处理不同。
const声明常量还有两个好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误。