关于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 相关文章推荐
IE8 兼容性问题(属性名区分大小写)
Jun 04 Javascript
jQuery代码实现发展历程时间轴特效
Jul 30 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
浅谈javascript的url参数parse和build函数
Mar 04 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
Jul 03 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
js实现图片放大展示效果
Aug 30 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
微信小程序实现一个简单swiper代码实例
Dec 30 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
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
Python continue语句用法实例
2014/03/11 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
解决Python使用列表副本的问题
2019/12/19 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
最新茶叶店创业计划书
2014/01/14 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
专项法律服务方案
2014/06/11 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android