`
hanyannan0123
  • 浏览: 15361 次
  • 性别: 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  
   肯定有人看,先回帖在看

相关推荐

    Javascript的词法作用域分析.pdf

    Javascript词法作用域分析 Javascript中的词法作用域分析是指变量的作用域不是在执行时决定的,而是在定义时决定的,也就是说通过静态分析就能确定。因此,词法作用域也叫做静态作用域。 在Javascript中,一个方法...

    深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx

    深化理解javascript作用域其次篇之词法作用域和动态作用域_ 深化理解javascript作用域其次篇之词法作用域和动态作用域,是javascript中非常重要的一部分。理解词法作用域和动态作用域对javascript的编程至关重要。...

    网易JS面试题与Javascript词法作用域说明

    JavaScript中的词法作用域是编程中的一个重要概念,它决定了变量的可访问性和作用范围。根据题目描述,我们来深入理解这一知识点。 首先,JavaScript的词法作用域在函数定义时就已经确定,而不是在函数执行时。这...

    深入了解JavaScript词法作用域

    JavaScript的词法作用域是编程中的关键概念,它决定了变量的可见性和生命周期。在JavaScript中,作用域由函数定义的位置决定,而不是代码块(如if语句或for循环)的位置,这就是所谓的函数作用域。不同于其他一些...

    javascript 词法作用域和闭包分析说明

    在深入探讨JavaScript中的词法作用域与闭包之前,首先需要了解作用域的概念。作用域定义了变量访问的规则,决定了代码在何处以及如何查找变量。JavaScript中的词法作用域,也就是静态作用域,意味着变量的作用域在...

    JavaScript词法作用域与调用对象深入理解

    JavaScript中的词法作用域和调用对象是理解其运行机制的关键概念。词法作用域指的是函数在其被定义时所在的作用域内运行,而非执行时。这意味着函数能够访问在其定义时可及的所有变量和函数,即使在它被调用时这些...

    深入理解javascript作用域第二篇之词法作用域和动态作用域

    本文是深入理解javascript作用域系列第二篇——词法作用域和动态作用域 词法作用域  第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成词法单元。这个概念是理解词法作用域的基础  ...

    一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包

    例如,JavaScript、Python等语言采用词法作用域。 动态作用域(Dynamic Scoping),又称为运行时作用域,与词法作用域相反,它在程序执行时根据函数的调用链来决定变量的可见性。在动态作用域中,函数查找变量时会...

    JavaScript进阶(二)词法作用域与作用域链实例分析

    本文实例讲述了JavaScript词法作用域与作用域链。分享给大家供大家参考,具体如下: 一、作用域 域表示的就是范围,即作用域,就是一个名字在什么地方可以使用,什么时候不能使用。想了解更多关于作用域的问题推荐...

    yjc930214#Blog-1#词法作用域1

    两个例子var scope= 'global scope'var scope= 'global scope'由于JavaScript采用词法作用域,函数的作用域

    JavaScript程序设计-变量作用域.pdf

    本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用域以及作用域链。 1.1 全局变量与局部变量 全局变量在整个程序中都可访问,即使在函数内部定义,它们也会成为全局变量,除非在函数内部重新...

    JavaScript作用域原理

    闭包是指函数能够记住并访问其词法作用域,即使在其父函数已经执行完毕后。这种能力使得闭包可以用来实现数据隐藏、模块化和内存管理等高级功能。 理解JavaScript的作用域规则对于编写可维护和高效的代码至关重要。...

    10-作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?_For_vip_user_0011

    "作用域链和闭包:代码中出现相同的变量,...通过了解作用域链、词法作用域和闭包,我们就可以更好地理解JavaScript引擎是如何选择相同的变量的。同时,我们也可以更好地理解JavaScript的执行机制和闭包的应用。

Global site tag (gtag.js) - Google Analytics