javascript的hoisting机制

javascript解释器中存在一种变量声明被提升(hoisting)的机制,即变量(函数)的声明会被提升到作用域的最前面。即使把声明代码写在最后面。

 alert(foo);    //function foo(){}
 alert(bar);   //undefined

 var bar = function(){};
 function foo(){};

 alert(foo);   //function foo(){}
 alert(bar);  //function bar(){}

从上例也能看出函数声明和函数表达式的不同的一个地方。

在javascript中也要注意另外一个变量和函数重名的问题:

function foo(){
     //body    
}

foo = 5;

 2014/05/29

js中还有变量对象的概念(VO variable ojbect),它与执行上下文有关,用于存储数据和访问数据。

用于存储的数据包括:

  1、函数参数

  2、函数声明

  3、变量声明

当进入执行上下文时,VO将会按照下面的顺序初始化:

  1、函数参数:VO的一个属性,这个有形参名称和值组成,如果没有传递实参,那就是形参名称和undefined;

  2、函数声明:由函数的名称和值组成,如果VO中存在该属性名称,则替换这个属性的属性值;

  3、变量声明:由变量名称和undefined组成,如果变量名和VO中的函数参数或者函数声明相同,则变量声明不会干扰已存在的属性。

 

 http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html

posted on 2014-05-11 11:45  思、慧  阅读(283)  评论(0编辑  收藏  举报

导航