`
hanyannan0123
  • 浏览: 15315 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Javascript 词法作用域

阅读更多
在《javascript权威指南》中有一句“javascript中的函数是通过词法来划分作用域的,而不是动态的划分作用域的。这意味着,它们在定义它们的作用于运行,而不是在执行它们的作用域里运行。”这句话精辟,但又很难理解。下面讲讲我的看法。
在javascript中一个函数的执行涉及到词法作用域、执行环境、活动对象、作用域链。(这3者的关系见附件图)。
具体的讲一个函数的执行涉及到2个步骤。
1、词法分析阶段。
2、执行阶段。
词法分析阶段已经将所有相应的源代码分析成语法树,构建词法作用域。
执行阶段将构建函数执行环境、相应的调用对象。并且将词法分析阶段所获取的信息添加至执行环境中,而获取作用域链。
举例说明:
function f(x) {
    var g = function () { return x; }
    return g;
}
var g1 = f(1);
var g2 = f(2);
alert(g1());  //输出 1
alert(g2());  //输出 2

在词法分析阶段,已经成生
var SyntaxTree={
window:{
g1:{value:f(1)},
g2:{value:f(2)}
},
functions:{
f:this.f,
},
f:{
variables:{x:'undefined'},
functions{g:this.g},
scope:this.window             //在词法分析阶段已经将所属环境确定下来了,所以                 //以后任何地方调用,都是按定义的时候走。
}
g:{
variables:{},
scope:this.f
}
}
执行阶段:
待续。。。。。

================
写累了,休息一下。也不知道有没有人看。
  • 大小: 40.9 KB
1
0
分享到:
评论
1 楼 yf7631497 2011-10-13  
   肯定有人看,先回帖在看

相关推荐

Global site tag (gtag.js) - Google Analytics