1,变量声明提升
所有的声明变量或声明函数都会被提升到当前函数的顶部,特别的只是变量或者函数的声明,并不包括赋值。
console.log(x); var x = 1; //打印出undefined
相当于
var x; console.log(x); x = 1;
这些转化是发生在js预编译时,代码执行之前。
2,函数声明提升
函数其实也是变量的一种,不过他有两种声明方式
- 函数声明
- 函数表达式
//函数声明 function fun(){ }
//函数表达式 var fun = function(){ }
正常情况下,我们使用两种写法,没有区别。
但是提到函数提升,他们的区别就出现了。
函数声明有函数提升,函数表达式却没有
var fun = function(){ console.log(‘表达式’); } function fun (){ console.log('函数声明'); } fun();
上面这段代码,输出的最终是‘表达式’,结合变量提升很容易理解,相当于一下代码执行顺序:
function fun (){ console.log('函数声明'); } var fun = function(){ console.log(‘表达式’); } fun();