javascript高级程序设计(第3版)学习笔记8——函数(中)

javascript高级程序设计(第3版)学习笔记8——函数(中)

ID:2018158

大小:129.50 KB

页数:10页

时间:2017-11-14

javascript高级程序设计(第3版)学习笔记8——函数(中)_第1页
javascript高级程序设计(第3版)学习笔记8——函数(中)_第2页
javascript高级程序设计(第3版)学习笔记8——函数(中)_第3页
javascript高级程序设计(第3版)学习笔记8——函数(中)_第4页
javascript高级程序设计(第3版)学习笔记8——函数(中)_第5页
资源描述:

《javascript高级程序设计(第3版)学习笔记8——函数(中)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、接着看函数——这个具有魔幻色彩的对象。在上篇文章中说函数内部属性时,还遗留了一个this内部属性没有解释,不过在说this之前,我想先说一说执行环境和作用域的概念。6、执行环境和作用域(1)执行环境(executioncontext):所有的JavaScript代码都运行在一个执行环境中,当控制权转移至JavaScript的可执行代码时,就进入了一个执行环境。活动的执行环境从逻辑上形成了一个栈,全局执行环境永远是这个栈的栈底元素,栈顶元素就是当前正在运行的执行环境。每一个函数都有自己的执行环境,当执行流进入一个函数时,会将这个函数的执行环境

2、压入栈顶,函数执行完之后再将这个执行环境弹出,控制权返回给之前的执行环境。(2)变量对象(variableobject):每一个执行环境都有一个与之对应的变量对象,执行环境中定义的所有变量和函数就是保存在这个变量对象中。这个变量对象是后台实现中的一个对象,我们无法在代码中访问,但是这有助于我们理解执行环境和作用域相关概念。(3)作用域链(scopechain):当代码在一个执行环境中运行时,会创建由变量对象组成的一个作用域链。http://qianming.qqq23.com这个链的前端,就是当前代码所在环境的变量对象,链的最末端,就是全局

3、环境的变量对象。在一个执行环境中解析标识符时,会在当前执行环境相应的变量对象中搜索,找到就返回,没有找到就沿着作用域链一级一级往上搜索直至全局环境的变量对象,如果一直未找到,就抛出引用异常。(4)活动对象(activationobject):如果一个执行环境是函数执行环境,也将变量对象称为活动对象。活动对象在最开始只包含一个变量,即arguments对象(这个对象在全局环境的变量对象中不存在)。   这四个概念虽然有些抽象,但还是比较自然的,可以结合《JavaScript高级程序设计(第3版)》中的一个例子来细细体会一下://进入到全局作用

4、域,创建全局变量对象varcolor="blue";functionchangeColor(){//进入到changeColor作用域,创建changeColor相应变量对象varanotherColor="red";functionswapColors(color1,color2){//进入到swapColors作用域,创建swapColors相应变量对象vartempColor=anotherColor;anotherColor=color;color=tempColor;/**swapColors作用域内可以访问的对象有:*全局变量对

5、象的color,changeColor*changeColor函数相应变量对象的anotherColor、swapColors*swapColors函数相应变量对象的tempColor*/}swapColors('white');/**changeColor作用域内可以访问的对象有:*全局变量对象的color,changeColor*changeColor函数相应变量对象的anotherColor、swapColors*/}http://maren.ttplay8.cnchangeColor();/**全局作用域内可以访问的对象有:*全局变

6、量对象的color,changeColor*/这里的整个过程是:(1)进入全局环境,创建全局变量对象,将全局环境压入栈顶(这里也是栈底)。根据前面的关于声明提升的结论,这里创建全局变量对象可能的一个过程是,先创建全局变量对象,然后处理函数声明设置属性changeColor为相应函数,再处理变量声明设置属性color为undefined。(2)执行全局环境中的代码。先执行color变量初始化,赋值为'blue',再调用changeColor()函数。(3)调用changeColor()函数,进入到changeColor函数执行环境,创建这个环

7、境相应的变量对象(也就是活动对象),将这个环境压入栈顶。创建活动对象可能的一个过程是,先创建活动对象,处理内部函数声明设置属性swapColors为相应函数,处理函数参数创建活动对象的属性arguments对象,处理内部变量声明设置属性anotherColor为undefined。(4)执行changeColor()函数代码。先执行anotherColor初始化为'red',再调用swapColors()函数。(5)调用swapColors()函数,进入到swapColors函数执行环境,创建相应的变量对象(活动对象),将swapColor

8、s执行环境压入栈顶。这里创建活动对象可能的一个过程是,先创建活动对象,处理函数参数,将形式参数作为活动对象的属性并赋值为undefined,创建活动对象的属性arguments对

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

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

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