1 变量提升,把变量的声明提升到当前作用域的最上面,不包括变量的赋值
2 函数提升,把函数的声明整体提升到当前作用域的最上面,不包括函数的调用
3 在预解析的过程中如果函数和变量的名字相同,此时函数优先
console.log(fn)//fn{}
fn()//==== undefined
var fn='function'
console.log(fn)//function
function fn(){
console.log(fn)
var fn=1;
}
相当于
4.变量提升,是不存在块级作用域的,但是函数提升是存在的
console.log(fn)//undefined
{
console.log(fn)//undefined
var fn=333;
}
console.log(fun)//undefined
{
console.log(fun)///fun{}
function fun(){
}
}
函数在块级作用域这相对于
浏览器的 ES6 环境中,块级作用域内声明的函数,行为类似于var声明的变量。
ES5 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。