let是es6中新增的东西,和var一样,也是用来声明变量的,在js中这两个关键字都能用来声明变量。最大的区别在于作用域中。
1、声明方法
let a=1;
var b=1;
它们声明起来都是差不多的。
2、作用域
全局作用域
console.log(window.a); //1
console.log(window.b); // undefined
在js中,window为全局对象,var是可以通过window对象访问到,而let不行。
函数作用域
function a1(){
let a = 1; // 函数作用域中的变量
var b = 1; // 函数作用域中的变量
}
在函数中,两个变量区别不大。
块作用域
let只能在for循环中可用,比较像其他的强语言中的for。而var可以在函数内for循环外中可用该变
量。
function a1(){
// i 对于for循环外的范围是不可见的(i is not defined)
for(let i = 1; i<5; i++){
// i只有b1在这里是可见的
}
// i 对于for循环外的范围是不可见的(i is not defined)
}
function b1(){
// i 对于for循环外的范围是可见的
for(var i = 1;i<5; i++){
// i 在for 在整个函数体内都是可见的
}
// i 对于for循环外的范围是可见的
}
还有一点,var允许在同一作用域中重复声明同名的变量,而let不可以
let a = 'foo';
let a = 'bar'; //报错,不能重复声明
var b = 'foo';
var b = 'bar'; //这里b被替代了,是可以重复声明的
let不存在变量提升,而var存在
a=1;//报错
b=1;//不会报错
let a;
var b;
|