关于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学习笔记(一) js基本语法
Oct 25 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
JS对文本框值的判断示例
Mar 10 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
javascript实现省市区三级联动下拉框菜单
Nov 17 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
vue父组件点击触发子组件事件的实例讲解
Feb 08 Javascript
js中Object.defineProperty()方法的不详解
Jul 09 Javascript
javascript实现日历效果
Jun 17 Javascript
简单了解JavaScript arguement原理及作用
May 28 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报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
curl和libcurl的区别简介
2015/07/01 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
viewer.js实现图片预览功能
2020/06/24 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python中的字典遍历备忘
2015/01/17 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
基于opencv实现简单画板功能
2020/08/02 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
护士检查书
2014/01/17 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
金秋助学感谢信
2015/01/21 职场文书
大学生个人学习总结
2015/02/15 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
Java 死锁解决方案
2022/05/11 Java/Android