关于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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
js去除空格的12种实用方法
Nov 08 Javascript
js键盘上下左右键怎么触发function(实例讲解)
Dec 14 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
Javascript中String的常用方法实例分析
Jun 13 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
jquery实现点击展开列表同时隐藏其他列表
Aug 10 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
分析JS中this引发的bug
Dec 12 Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 Javascript
Electron vue的使用教程图文详解
Jul 05 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
JavaScript实现区块链
2018/03/14 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
python计算时间差的方法
2015/05/20 Python
浅谈Python处理PDF的方法
2017/11/10 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
linux环境下Django的安装配置详解
2019/07/22 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
将相和教学反思
2014/02/04 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
党章培训心得体会
2014/09/04 职场文书
外贸英文求职信范文
2015/03/19 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
一文简单了解MySQL前缀索引
2022/04/03 MySQL
Python作用域和名称空间的详细介绍
2022/04/13 Python