关于Javascript作用域链的八点总结


Posted in Javascript onDecember 06, 2013

1. JavaScript函数的作用域链分为定义时作用域链和运行时作用域链;

2.函数被定义的时候,它有一个属性[[scope]]标明它的定义作用域链,定义时作用域链[[scope]]遵守这样的规则:一个函数的定义时作用域链[[scope]]总是它所在的外部函数的执行时作用域链;

3.全局函数的定义作用域链只包含window的属性;

4.一个函数的执行时作用域链总是在定义时作用域链的头部压入当前活动对象(它包含this,arguments,参数,局部变量);

5.函数执行时,变量寻址总是从作用域链的顶端朝下寻找;所以全局变量的寻址速度最慢;

6.内部函数被执行的时候,他仍然能够访问它完整的作用域链。这就是闭包能够在运行时能够访问已经结束的外部函数定义的变量的原因;

7.函数执行遇到with语句时,会临时在作用域链顶部压入with指定的对象的所有属性作为作用域链最顶端;

8.函数执行遇到catch的时候,会临时在作用域链顶部压入catch指定的错误对象作为作用域链的最顶端;

下面给一个例子并绘制出作用域链,以加深理解:

有这么一段代码:

function assignEvents(){
    var id = "xdi9592";
    document.getElementById("save-btn").onclick = function(event){
        saveDocument(id);
    };
}

把此函数产生的匿名闭包称为Closure,则绘制出下图为assignEvent执行时作用域链和Closure的定义时作用域链:

关于Javascript作用域链的八点总结

Javascript 相关文章推荐
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
javascript常用经典算法实例详解
Nov 25 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
Oct 18 Javascript
利用JS实现文字的聚合动画效果
Jan 22 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
AngularJS 监听变量变化的实现方法
Oct 09 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
layer ui 导入文件之前传入数据的实例
Sep 23 Javascript
element-ui 本地化使用教程详解
Oct 28 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
Apr 09 Javascript
Javascript变量作用域详解
Dec 06 #Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 #Javascript
Javascript中克隆一个数组的实现代码
Dec 06 #Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 #Javascript
如何判断元素是否为HTMLElement元素
Dec 06 #Javascript
随鼠标上下滚动的jquery代码
Dec 05 #Javascript
js简单实现删除记录时的提示效果
Dec 05 #Javascript
You might like
建立动态的WML站点(一)
2006/10/09 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
用Django写天气预报查询网站
2018/10/21 Python
python实现年会抽奖程序
2019/01/22 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
python实现翻译word表格小程序
2020/02/27 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
生物化学研究助理员求职信
2013/10/09 职场文书
公司聘任书模板
2014/03/29 职场文书
留学顾问岗位职责
2014/04/14 职场文书
2014年班务工作总结
2014/12/02 职场文书
企业法人任命书
2015/09/21 职场文书
党组织结对共建协议书
2016/03/23 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers