ES6为我们提供两种新的定义变量的形式let 和const。在 ES6普及之前,我们最常使用 var。
对比var、let、const
var
-
ES5中只有函数级别的作用域。使用 var 声明变量会存在各种问题。
for (var i = 0; i < 10; i ++) { console.log(i); } console.warn(i === 10);//trueES5的作用域给程序员造成了很多的麻烦,首先是变量名的定义变得复杂,其次优秀的coder 为了缩小作用范围常常使用立即执行函数来模拟块级作用域,代码变得难以理解,冗长。
(function () { for (var i = 0; i < 10; i ++) { console.log(i); } })(); console.warn(i); //Uncaught ReferenceError: i is not defined -
var可以重复声明同一变量
var demo = 'demo'; var demo = 'redefined demo'; console.log(demo);//redefined demo -
变量声明提升
console.log(demo);//undefined var demo = 'demo';
let
-
let 存在块级作用域中, 看一下使用 let 的 for 循环
for (let i = 0; i < 10; i ++) { console.log(i); } console.log(i);//Uncaught ReferenceError: i is not defined at <anonymous>:4:13 -
let 不能重复声明变量
let demo01 = 'demo'; let demo01 = 'redefined demo';//Uncaught SyntaxError: Identifier 'demo01' has already been declared -
let 定义的变量不存在变量提升
console.log(demo4hosited);//VM304:1 Uncaught ReferenceError: demo4hosited is not defined let demo4hosited = 'demo4hosited';
const
const 可以理解为 let 的升级版同样具备上述的三个特性。const 用来声明 不可变的变量。
const KEY_NUM = 'ddddddddddddd';
KEY_NUM = '123';//VM794:2 Uncaught TypeError: Assignment to constant variable.若更改 const 的变量的值会报错
const和 let 的优点
最大的优点就是为 js 引入了块级作用域,使得编码变的简洁。
那你可能会疑问什么时候用 let 什么时候使用 const,个人的原则是能用 const 的地方就不用 let🤗。其实 coding 发展到今天,我们应该意识到程序是给人读的而不是给机器读的。当变量不可变时就使用 const,变量可变时就使用 let 声明。做到见名知意,看到 const 定义的变量,自然地想这个变量是 read-only 的,别人不会去更改它的值,同时我也不要更改它。