关于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 TextArea动态显示剩余字符
Oct 22 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
javascript代码加载优化方法
Jan 30 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
Apr 23 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
vue.js实例todoList项目
Jul 07 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
基于javascript实现贪吃蛇小游戏
Nov 25 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 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使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python基础梳理(一)(推荐)
2019/04/06 Python
详解python polyscope库的安装和例程
2020/11/13 Python
CSS3 边框效果
2019/11/04 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
四群教育工作实施方案
2014/03/26 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
焦裕禄观后感
2015/06/03 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript