关于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 相关文章推荐
收集的网上用的ajax之chat.js文件
Apr 08 Javascript
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
javascript工具库代码
Mar 29 Javascript
页面载入结束自动调用js函数示例
Sep 23 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
详解javascript高级定时器
Dec 31 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
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
PHP 危险函数解释 分析
2009/04/22 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
商场促销活动总结
2014/07/10 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2014年工人工作总结
2014/11/25 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
7个关于Python的经典基础案例
2021/11/07 Python
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers