函数提升在变量提升之上
js引擎在解析js代码的步骤:一是解释,二是执行
解释就是先通篇扫描所有的js代码,然后把所有声明提到顶端,第二则是执行
变量提升
console.log(foo) /*打印 undefined*/ var foo=1 /*变量被提升到当前环境的最顶端*/
直接打印
console.log(foo) /*报错*/
函数提升
foo() /*打印 1*/ function foo(){ console.log(1) }/**函数声明提升把整个函数提升到当前环境的最顶端*/
foo()/*打印 foo is bot a function*/ var foo=function(){ console.log(1) }
变量提升只会提升函数名,而函数提升则会提升整个函数
var foo; console.log(foo) /*打印 undefined 定义未被赋值*/ foo=1 foo() /*foo is not a function 变量只提升函数名*/ foo=function(){ console.log(10) }
console.log(foo) /*输出函数体 */ var foo=1 console.log(foo) /* 1 */ function foo(){ console.log('1) } console.log(foo) /* 1 */ 等价于 function foo(){ console.log('1) } var foo; console.log(foo) foo=1 console.log(foo)