关于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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
jquery教程ajax请求json数据示例
Jan 13 Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
微信小程序页面缩放式侧滑效果的实现代码
Nov 15 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
微信小程序后端实现授权登录
Feb 24 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
微信小程序实现文件预览
Oct 22 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的异常处理类Exception的使用及说明
2012/06/13 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
Python 常用模块 re 使用方法详解
2019/06/06 Python
Python3内置模块random随机方法小结
2019/07/13 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
Python如何使用input函数获取输入
2020/08/06 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
python3判断IP地址的方法
2021/03/04 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
strstr()的简单实现
2013/09/26 面试题
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
终止劳动合同通知书
2015/04/16 职场文书
学校运动会加油词
2015/07/18 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB