关于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 相关文章推荐
对象特征检测法判断浏览器对javascript对象的支持
Jul 25 Javascript
JavaScript this 深入理解
Jul 30 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
Apr 18 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
Aug 03 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
js 实现Material UI点击涟漪效果示例
Sep 23 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 分库分表hash算法
2009/11/12 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
react路由配置方式详解
2017/08/07 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python读取oracle函数返回值
2016/07/18 Python
Python之文字转图片方法
2018/05/10 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
介绍一下gcc特性
2012/01/20 面试题
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
2014年自我评价
2014/01/04 职场文书
阿甘正传观后感
2015/06/01 职场文书
电台广播稿范文
2015/08/19 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis