天天看点

js var let区别1,作用域不同

1,作用域不同

var作用域是全局作用域

let作用域是块级作用域

var a="sss"
{
    let b="www"
}
console.log("aaa",a)
console.log("bbb",b)
           

 报错

ReferenceError: b is not defined
           

 作用域不同导致的实际应用差距:

var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10

var b = [];
for (let i = 0; i < 10; i++) {
b[i] = function () {
console.log(i);
};
}
b[6](); // 6
           

当i使用var声明时,它的有效范围是全局范围,因此每一轮循环体都使用的是同一个i,直到最后i变成10退出循环。

当i使用let声明后,当前的i只能在本轮循环有效,每次循环的i其实是一个新的变量。所以let i声明方式最后输出6。

2,var有变量提升,let没有变量提升

let只能先声明再使用变量,若在声明前使用变量则报错:

console.log(dadaaa);
let  dadaaa=111

ReferenceError: Cannot access 'dadaaa' before initialization
           

var可以在声明前使用变量,报undefined

console.log(dadbbb);
var  dadbbb=222

undefined
           

继续阅读