关于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中的事件处理
Jan 16 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
Jan 12 Javascript
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
Nov 07 Javascript
详解jQuery lazyload 懒加载
Dec 19 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
JS实现压缩上传图片base64长度功能
Dec 03 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
Apr 01 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
Sep 04 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文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
vue实现购物车加减
2020/05/30 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
linux面试题参考答案(5)
2014/09/01 面试题
介绍一下linux的文件系统
2015/10/06 面试题
初三化学教学反思
2014/01/23 职场文书
服务质量承诺书
2014/03/27 职场文书
一年级学生期末评语
2014/04/21 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书