javascript执行环境及作用域详解_javascript技巧

javascript执行环境及作用域详解_javascript技巧

ID:30779912

大小:139.50 KB

页数:7页

时间:2019-01-03

javascript执行环境及作用域详解_javascript技巧_第1页
javascript执行环境及作用域详解_javascript技巧_第2页
javascript执行环境及作用域详解_javascript技巧_第3页
javascript执行环境及作用域详解_javascript技巧_第4页
javascript执行环境及作用域详解_javascript技巧_第5页
资源描述:

《javascript执行环境及作用域详解_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、javascript执行环境及作用域详解最近在重读《javascript高级程序设计3》,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦。今天耍总结的是js执行环境和作用域。首先來说一下执行环境一、执行环境书上概念,执行环境定义了变量或者函数冇权访问的其他数据,决定了他们各口的行为。每个执行环境都有一个与之关联的变量对象。环境中定义的所有变量和函数都保存在这个对象屮。虽然我们在编写代码的吋候无法访问这个对象,但解析器在处理数据时会在后台用到它。执行环境是一个概念,一种机制,它定义了变量或函数是否有权访问其他数据在javascript

2、中,可执行的JavaScript代码分三种类型:1.GlobalCode,即全局的、不在任何函数里面的代码,例如:一个js文件、嵌入在HTML页面中的js代码等。2.EvalCode,即使用eval()函数动态执行的JS代码。3.FunctionCode,即用户自定义函数中的函数体JS代码。跳过EvalCode,只说全局执行环境和函数执行环境。1、全局环境:全局环境是最外围的一个执彳亍环境。全局执彳亍环境被认为是window对象。因此所有全局变量和函数都是作为window对象的屈性和方法创建的。代码载入浏览器时,全局执行环境被创建(当我们关

3、闭网页或者浏览器时全局执行环境才被销毁)。比如在一个页面中,第一次载入JS代码时创建一个全局执行环境。这也是为什么闭包有一个内存泄露的缺点。因为闭包屮外部函数被当成了全局环境。所以不会被销毁,一直保存在内存中。2、函数执行环境每个函数都冇自己的执行环境,当执行进入一个函数时,函数的执行环境就会被推入一个执行环境栈的顶部并获取执行权。当这个函数执行完毕,它的执行环境又从这个栈的顶部被删除,并把执行权并述给之前执行环境。这就是ECMAScript程序中的执行流。也可以这样解读:当调用一个JavaScdpt函数时,该函数就会进入与该函数相对应的执

4、行环境。如果又调用了另外一个函数,则又会创建一个新的执行环境,并且在函数调用期间执行过程都处于该环境中。当调用的函数返冋后,执行过程会返回原始执行环境。因而,运行屮的JavaScript代码就构成了一个执行环境栈。当函数被调用时函数的局部环境被创建(函数内的代码执行完毕后,该环境被销毁,同时保存在其中的所有变量和函数定义也随之被销毁)。2-1定义期函数定义的时候,都会创建一个[[scope]]屈性,通这个对象对应的是一个对象的列表,列表屮的对象仅能javascript内部访问,没法通过语法访问。(scope也就是作用域的意思。)我们定义一全

5、局函数A,那么A函数就创建了一个A的[[scope]]属性。此时,[[scope]]里面只包含了全局对象[GlobalObject]o而如果,我们在A的内部定义一个B函数,那B函数同样会创建一个[[scope]]屈性,B的[[scope]]屈性包含了两个对彖,一个是A的活动对彖ActivationObjects一个是全局对彖,A的活动对彖在前面,全局对彖排在后面。简而言之,一个函数的[Scope]属性中对象列表的顺序是上一层函数的ActivationObject对彖,然后是上上层的,一直到最外层的全局对彖。卜而是示例代码:A只冇一个scop

6、e,B冇两个scope//外部函数functionA(){varsomevar;//内部函数functionB(){varsomevar;}2-2执行期当函数被执行的吋候,就是进入这个函数的执行环境,首先会创一个它自己的活动对象[ActivationObject](这个对象中包含了this、参数(arguments)>局部变量(包括命名的参数)的定义和一个变量对象的作用域链[[scopechain]],然后,把这个执行环境的[scope]按顺序复制到[[scopechain]]里,最后把这个活动对彖推入到[[scopechain]]的顶部。

7、这样[[scopechain]]就是一个有序的栈,这样保了对执行环境有权访问的所有变量和对象的有序访问。//笫一步页面载入创全局执彳亍环境globalexecutingcontext和全局活动彖//定义全局[[scope]],只含有Window对象//扫描全局的定义变量及函数对象:color[undefined]>changecolor[FD创建changecolor的[[scope]],此时里面只含有全局活动对象】,加入到window中,所以全局变量和全局函数对象都是做为window的屈性定义的。//程序已经定义好所以在此执行环境内任何位

8、置都可以执行changecolor(),color也已经被定义,但是它的值是undefined//第二步color赋值"blue"varcolor="blue";//它是不需要赋

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。