关于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 相关文章推荐
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
jquery中live()方法和bind()方法区别分析
Jun 23 Javascript
JavaScript实现移动端轮播效果
Jun 06 Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 Javascript
webstorm中vue语法的支持详解
May 09 Javascript
原生JavaScript实现remove()和recover()功能示例
Jul 24 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 Javascript
在JavaScript中如何使用宏详解
May 06 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 处理图片的类实现代码
2009/10/23 PHP
php日期操作技巧小结
2016/06/25 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
网上书店创业计划书
2014/01/12 职场文书
校园安全教育广播稿
2014/02/17 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2014年图书室工作总结
2014/12/09 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
市场部岗位职责范本
2015/04/15 职场文书
家长会开场白和结束语
2015/05/29 职场文书
在校学生证明格式
2015/06/24 职场文书
学生会招新宣传语
2015/07/13 职场文书
交通事故协议书范本
2016/03/19 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS