let和var的区别
2019-05-23 本文已影响0人
无名程序猿
var 和 let 都是用于变量声明的关键字
- 作用域
var 是函数级作用域,let是块级作用域 - 变量提升问题
//var
console.log(a);
var a=0;
//结果a= undefined
//let 暂时性死区(let块级作用域下,在变量声明之前的区域内不可使用该变量。)
console.log(b);//Uncaught ReferenceError: Cannot access 'b' before initialization(不可再变量声明前使用)
let b = 2;
- 声明次数(同一变量)
var 可以声明多次
let 只可声明一次
//var
var a=1;
var a=2;
console.log(a); // 2
//let
let b=1;
let b=2;//直接报错
- 典型事例
var a = 0;
function test() {
console.log(a);
var a = 2;
}
test(); // undefined 包含var是函数作用域 + 变量提升问题
console.log(a);// 0 访问到的变量全局作用域下的a变量,test函数中声明的变量只作用域是当前函数内。
// for 循环应用实例
// var
for(var i=0;i<5;i++){
setTimeout(function(){
console.log("var:" + i);
})
}
// let
for(let i=0;i<5;i++){
setTimeout(function(){
console.log("let" + i);
})
}