var
var是js中最早出现的定义变量关键字,但是var有着天生的缺陷,var定义的变量并不是完全以块作为作用域的,用var来定义的变量,有时候会出现意外的结果,比如:
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 100 * i);
}
这段代码输出的是:
10
10
10
10
10
10
10
10
10
10
而不是我们期待的:
0,1,2,3,4,5,6,7,8,9
这是因为setTimeout
函数让后面的匿名函数延迟执行了,在第一个匿名函数执行时,for
循环早就跑完了,这个时候i
已经是10
了,正是因为var定义的变量会因为时间跳出框外,所以在处理许多回调,事件之类的情况下会变得非常复杂。
let
let就是正常的用块来表示作用域的变量。
const
const与let的区别在于用这个关键词声明的变量不能改变。