变量或函数 提升
-
变量提升
console.log(fn) //输出:undefined var fn = 12
变量提升,是把变量提升提到函数上边,注意:变量提升 只提升变量的声明,不会把赋值也提升上来
所以,正儿八经的情况是这样的...var fn; // 先声明 console.log(fn) fn = 12 //运行时才赋值
- 函数提升(两种方式:1. 函数表达式 2.函数声明式)
1.函数表达式提升
console.log(fn()) //输出:TypeError: fn is not a function var fn = function(){ console.log(2) }
函数表达式方式提升和普通变量提升一样,只声明不赋值
2.函数声明式提升
console.log(fn()) //输出:1 //函数声明 function fn(){ console.log(1) }
函数声明方式提升,会提升到作用域最前边,并且将声明内容一起提升到最上边 总结: 1. 所有的声明都会提升到作用域的最顶上去
2. 同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉
3.var关键字只声明;function关键字声明+定义,并且函数声明和函数定义的部分一起被提升