ES5中,js代码执行时,大致分2步。首先第一步是代码编译,其次第二步才是代码执行,
然而在代码编译第一阶段会把var声明的变量和声明创建的函数进行提升
1.var定义的变量时会发生变量提升
例如
console.log(a) //输出结果为undefined即定义但未赋值!
var a = 1;
console.log(a)//输出结果为1,即该过程才发生a=1的赋值!
该过程也可以是等价于
var a;
console.log(a);
a=1;
console.log(a);
2.函数提升
例
fun1(); //输出结果为fun1
function fun1 (){
console.log('fun1')
}
3.当函数名和变量名相同时,函数提升的优先级高于变量提升的优先级!
例
var a ;
console.log(typeof a) //输出结果为function
function a () {
}
console.log(typeof a) //输出结果也为function
因为函数变量提升同时函数提升的优先级高于变量提升的优先级,所以无论如何输出a,a的类型都是function
函数提升的另外一个例子:
var c = 1;
function c(c){
console.log(c)
var c = 3;
}
c(2);
//输出结果会报错!因为函数提升优先级该与变量提升优先级,所以c是一个function
//同时因为赋值会晚于函数提升和变量提升,从而会发生c=2.
该段代码等价于
var c;
function c (c){
console.log(c);
var c = 3;
}
c=1;
c(2)
纯小白理解,如有纰漏,请大佬们多多指教。。