=波波日志 > JavaScript/Ajax > javascript 作用域链分析=

[转]javascript 作用域链分析

+展开
-JavaScript
  var a = 10;
  function test() {
    a = 100;
    alert(a);
    alert(this.a);
    var a;
    alert(a);
  }
 test();

对于上述代码中test函数的作用域链的形成过程:

step:1
[[scope]] = {
{

a: undefine,

test: undefined,
document: ...,
location: ...,
}

}

step2:

[[scope]] = {
{

a: 10,

test: undefined,
document: ...,
location: ...,
}

}

step43:

[[scope]] = {

{

a: 100,

},

{

a: 10,

test: undefined,
document: ...,
location: ...,
}

}

[[scope]] = {

{

a: undefined,
},

{

a: 10,

test: undefined,
document: ...,
location: ...,
}

}

2. 先对全局进行语法分析,将var 变量及 function建立作用域链,分别对应varDecls和funcDecls,同时对应funcDecls还会创建函数对象,将varDecls加入到 funcDecls的scope中。再对全局执行(如此时有赋值操作即会执行);再根据调用情况建立调用对象,将全局对象的作用域链加入到调用对象的作用域中,对函数内部的变量或者内部函数定义进行语法分析,语法分析完成后再进行函数的执行,如此进行循环。这样便组成作用域链,从内层到外层。一定要记住先语法分析(定义),再执行(执行的过程中就直接查找已经行成的作用域链,如若变量定义在alert后,则先将输入undefined),先外后内。

3. 预编译干的事可以理解为将一些作用域链保存入栈,在运行阶段才开始去执行函数。
类别:JavaScript/Ajax 作者:转载 日期:2011-08-13 【评论:0】 
 
暂时没有评论!
发表留言
  • *昵称:
  • 头像:
  • 电子邮件: [留下您的邮件,方便管理员回复您。]
  • 个人网站: *验证码:
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除!
Powered by showbo,©2012,桂ICP备05005887号 京公网安备1101055090