1.变量声明提升
1.1var只有函数块级作用域
函数中的var变量只会提升到函数最顶端,其他类型的{}对于var来说不算块级作用域,会提升到全局
function fn(){
var d=40;
}
变量没有提升到全局
console.log(d)//d is not defined
{},for循环,if判断中的var声明没有块级作用域,变量会提升到全局
for (let index = 0; index <1; index++) {
var a=10;
}
if(true){
var b=20
}
{
var c=30
}
console.log(a);//10
console.log(b);//20
console.log(c);//30
1.2所有的{}对于let都是块级作用域,let声明的变量只会提升到块级作用域最顶端,块级作用域中声明的变量只在块级作用域内生效
for (let index = 0; index <1; index++) {
let a=10;
}
if(true){
let b=20
}
{
let c=30
}
function fn(){
let d=40
}
console.log(a);//a is not defined
console.log(b);//b is not defined
console.log(b);//c is not defined
console.log(d);//d is not defined