JS特性Hoisting——提升

foo();

var foo = function(){
  alert('hello')
}

上面代码foo执行时会报错: foo is not a function.

而下面这段代码就会正常执行

foo();

function foo(){
  alert('hello')  
}

原因是JS有一个特性叫做Hoisting,我们一般叫它'提升'。

它会把你声明的变量提到作用域的最顶部,而此变量定义的位置不变。下面就是声明和定义:

var a; // 声明变量
a = 1; // 定义变量

 

所以最上面那段代码经过JSHoisting后就会变成这样

var foo;

foo();

function foo(){
  alert('hello')  
}

所以当程序执行到foo()时,JS会报错foo不是一个函数,因为foo只是被声明了,而没有被定义。

 

posted @ 2016-09-01 18:00  lamante  阅读(186)  评论(0)    收藏  举报