Javascript词法作用域分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Javascript词法作用域分析

Javascript词法作用域分析   摘要:在JavaScript中,一个方法使用的地方和定义的地方有时会大相径庭,在该方法执行时,它不能访问哪些变量?可以访问哪些变量?这个需要怎么判断呢?这就是该文需要分析的问题——词法作用域。   关键词:JavaScript;执行环境;活动对象;词法作用域;闭包   中图分类号:TP271 文献标识码:A 文章编号:1009-3044(2012)36-8663-04   1 JavaScript词法作用域   JavaScript中词法作用域指变量的作用域不是执行时决定而是在定义时决定,也就是说通过静态分析就能确定,词法作用域取决于源码,因此词法作用域也叫做静态作用域。with和eval除外,所以只能说JS的作用域机制非常接近词法作用域。   我们可以很快的写出一个方法,但你可能没有进行过深入的学习和了解到底方法内部是如何执行,执行的细节又是什么。这就需要了解JavaScript引擎的工作方式,才能了解这些细节,下面我??就把JavaScript引擎对一个方法的解析过程进行一个稍微深入一些的介绍   3 JavaScript方法解析过程   JavaScript是一种解释型语言,要开始解释执行,得通过词法分析和语法分析得到语法分析树后才可以。当一个文档流中包含多个script代码段,那么它们的运行顺序是:   1)读入第一个代码段   2)做词法分析和语法分析,有错则报语法错误,并跳转到步骤5   3)对var变量和function定义做“预解析“   4)执行代码段,有错则报错   5)如果还有下一个代码段,则读入下一个代码段,重复步骤2   6)结束   3.1 特殊说明   全局域(window)域下所有JavaScript代码会被自动执行,可以被看成是一个“匿名方法“,而此“匿名方法“内的其它方法则是在被显示调用的时候才被执行。   3.2 关键步骤   上面的过程,我们主要是分成两个阶段   1)解析:就是通过语法分析和预解析构造合法的语法分析树。   2)执行:执行具体的某个function,JavaScript引擎在执行每个函数实例时,都会创建一个执行环境(ExecutionContext)和活动对象(activeObject)。   3.3 关键概念   到这里,我们再更强调以下一些概念,这些概念都会在下面用一个一个的实体来表示,便于大家理解   1)语法分析树(SyntaxTree)可以直观地表示出这段代码的相关信息,具体的实现就是JavaScript引擎创建了一些表,用来记录每个方法内的变量集(variables),方法集(functions)和作用域(scope)等   2)执行环境(ExecutionContext)可理解为一个记录当前执行的方法(外部描述信息)的对象,记录所执行方法的类型,名称,参数和活动对象(activeObject)   3)活动对象(activeObject)可理解为一个记录当前执行的方法(内部执行信息)的对象,记录内部变量集(variables)、内嵌函数集(functions)、实参(arguments)、作用域链(scopeChain)等执行所需信息,其中内部变量集(variables)、内嵌函数集(functions)是直接从第一步建立的语法分析树复制过来的   上面就是关于语法分析树的一个简单表示,正如我们前面分析的,语法分析树主要记录了每个 function中的变量集(variables),方法集(functions)和作用域(scope)。以下是语法分析树关键点:   1)变量集(variables)中,只有变量定义,没有变量值,这时候的变量值全部为“undefined”   2)作用域(scope),根据词法作用域的特点,这个时候每个变量的作用域就已经明确了,而不会随执行时的环境而改变。   3)作用域(scope)建立规则   a) 对于函数声明和匿名函数表达式来说,[scope]就是它创建时的作用域   b) 对于有名字的函数表达式,[scope]顶端是一个新的JavaScript对象(也就是继承了Ototype),这个对象有两个属性,第一个是自身的名称,第二个是定义的作用域,第一个函数名称是为了确保函数内部的代码可以无误地访问自己的函数名进行递归。   4.2 执行环境与活动对象   语法分析完成,开始执行代码。我们调用每一个方法的时候,JavaScript引擎都会自动为其建立一个执行环境和一个活动对象,它们和方法实例的生命周期保持一致,为方法执行提供必要的执行支持,针对上面的几个方法,我们这里统一为其建立了活动对象,具体如下:   上面每一个活动

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档