变量提升


函数提升在变量提升之上

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)
原文地址:https://www.cnblogs.com/yewook/p/9548536.html