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 相关文章推荐
js 格式化时间日期函数小结
Mar 20 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
Jquery调用iframe父页面中的元素及方法
Aug 23 Javascript
全屏滚动插件fullPage.js使用实例解析
Oct 21 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
JS实现二维数组横纵列转置的方法
Apr 17 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
React Native中Mobx的使用方法详解
Dec 04 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 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
PHP 函数语法介绍一
2009/06/14 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP递归算法的简单实例
2019/02/28 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
动态加载iframe
2006/06/16 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
Python编写一个优美的下载器
2018/04/15 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
python利用7z批量解压rar的实现
2019/08/07 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
如何完美的建立一个python项目
2020/10/09 Python
公司清洁工岗位职责
2013/12/14 职场文书
鲜花方阵解说词
2014/02/13 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
团员年度个人总结
2015/02/26 职场文书
农村党支部承诺书
2015/04/30 职场文书