关于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相关JS代码片段和浏览器模型
Aug 15 Javascript
Javascript String.replace的妙用
Sep 08 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
javascript实现C语言经典程序题
Nov 29 Javascript
Validform表单验证总结篇
Oct 31 Javascript
js实现带简单弹性运动的导航条
Feb 22 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php中filter_input函数用法分析
2014/11/15 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
python动态加载变量示例分享
2014/02/17 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python学生管理系统开发
2019/01/30 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python如何省略括号方法详解
2020/03/21 Python
python代码能做成软件吗
2020/07/24 Python
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
销售文员岗位职责
2013/11/29 职场文书
车间班长岗位职责
2013/11/30 职场文书
消防安全检查制度
2014/02/04 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python