JavaScript 函数的执行过程


Posted in Javascript onMay 09, 2016

1. 每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫”作用域链”, 集合中存储着”可变对象”VO或”活动对象”AO(AO比VO多this和arguments属性).

2. 当函数被创建后, 其父级作用域的作用域链中的所有可变对象会被加入到它的[[scope]]中(如果父作用域是全局, 那么当前函数的作用域链中就只会加入一个全局对象).

3. 当函数被执行时, 函数的执行环境会被推入一个环境栈中:

1.此时进入函数的变量初始化阶段, 此阶段会确定函数内部: this值, 函数的参数, 函数的声明, 变量的声明, 以及arguments. 根据这些值组成当前函数的活动对象AO, 之后会将AO对象保存到当前函数作用域链的首位.

注意: AO按如下顺序填充:

1.函数参数(若有传参, 会被赋值, 若未传参, 初始化值为undefined) 优先级第二
2.函数声明(若发生命名冲突, 会覆盖) 优先级最高
3.变量声明(初始化变量值为undefined, 若发生命名冲突, 会忽略) 优先级第三
2.然后就到了函数的执行阶段, 此阶段当前函数中使用到的所有变量和函数声明都会从当前函数的[[Scope]]作用域链中查找, 根据作用域链中对象的位置首先会查找当前函数的AO对象, 如果没有再查找上层对象, 最后找到全局对象, 如果都没有则会报错(变量未定义).

以上这篇JavaScript 函数的执行过程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
javascript实现页面内关键词高亮显示代码
Apr 03 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
jQuery获取checkbox选中的值
Jan 28 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
详解angular element()方法使用
Apr 08 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
vue使用jsonp抓取qq音乐数据的方法
Jun 21 Javascript
详解Vue路由自动注入实践
Apr 17 Javascript
JS三级联动代码格式实例详解
Dec 30 Javascript
JavaScript数组排序功能简单实现
May 14 Javascript
jQuery绑定事件-多种实现方式总结
May 09 #Javascript
js原型链与继承解析(初体验)
May 09 #Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
May 09 #Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 #Javascript
JavaScript中的prototype原型学习指南
May 09 #Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 #Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 #Javascript
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP文件操作实现代码分享
2011/09/01 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
详解vue中axios的封装
2018/07/18 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
tensorflow 变长序列存储实例
2020/01/20 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
秘书专业自荐信范文
2013/12/26 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
银行奉献演讲稿
2014/09/16 职场文书
婚前协议书范本
2014/10/27 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
辩护意见书
2015/06/04 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
大学班长竞选稿
2015/11/20 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
正则表达式拆分url实例代码
2022/02/24 Java/Android