let和const声明
let与var区别:
1.var出了块级区域有效;
2.let出了块级区域无效;
3.var声明具有变量提升能力,不管在哪里声明,均视为作用域顶部声明;
4.let声明不具备变量提升能力,离开区块的作用域后,则变量立刻失效;
如下:
var value = 10;
let count = 20;
}
console.log(value); //10
console.log(count); //引用错误
undefined表示变量声明了,只是没有赋值,按理说顺序要在前面
console.log(value); //undefined
var value; //变量提升导致逻辑怪异
输出为:undefined
let声明方式,就算在后面有声明,前面的输出依然是引用错误
console.log(count); //引用错误
let count;
在Let声明前使用变量,这段区域被称为“临时死区(或暂时性死区)”
if(true){
//死区开始
value = 10;
console.log(value);
//死区结束
let value;
}
一般情况下,typeof来判断未声明的变量,只会输出undefined;
console.log(typeof value);
let value;
var声明可以重复声明同一个变量,后面会取代前一个变量;
let声明不可以重复声明一个变量,会直接报错,就算其中一个是var;
let value = 20; //两个let报错,let和var各以一个也报错
var value = 20; //报错,更换顺序报错
如果一个在作用域外部,一个在作用域内部,则可以并存; let value = 20; { let value = 10; //不建议相同,会乱 }
在循环中,var和let的区别尤为明显,let只在循环内部有效;
var全局有效,导致后续再使用i会引起干扰,而let则不会
for (let i = 0; i<10; i++){
console.log(i);
}
console.log(i); //var声明,则10; let声明,报错
如果再循环体内设置函数方法,体外输出var会得到不想要的值
var list = [];
for (var i=0; i<10; i++){
list[i] = function (){
console.log(i);
}
}
list[5](); //这里不管设置多少,结果都是10