关于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 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
Jquery中扩展方法extend使用技巧
Aug 24 Javascript
一个不错的js html页面倒计时可精确到秒
Oct 22 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
May 16 Javascript
node.js实现登录注册页面
Apr 08 Javascript
微信小程序select下拉框实现效果
May 15 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
关于尾递归的使用详解
2013/05/02 PHP
php中adodbzip类实例
2014/12/08 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
浅谈Javascript变量作用域问题
2014/12/16 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
解决python中无法自动补全代码的问题
2018/12/04 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
python 实现生成均匀分布的点
2019/12/05 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
红头文件任命书范本
2014/06/05 职场文书
求职简历自荐信
2014/06/18 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
2015年幼师工作总结
2015/04/28 职场文书
经典爱情感言
2015/08/03 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python