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 相关文章推荐
如何让div span等元素能响应键盘事件操作指南
Nov 13 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
jQuery 复合选择器应用的几个例子
Sep 11 Javascript
学习JavaScript设计模式(链式调用)
Nov 26 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
Apr 26 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
Sep 17 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
JavaScript prototype属性详解
Oct 25 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
JS实现可针对算术表达式求值的计算器功能示例
Sep 04 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
Sep 05 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中$_FILES的使用以及注意事项
2013/07/05 PHP
smarty简单分页的实现方法
2014/10/27 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
div模拟选择框示例代码
2013/11/03 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
Python psutil模块简单使用实例
2015/04/28 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python中的id()函数指的什么
2017/10/17 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
python tkinter实现连连看游戏
2020/11/16 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
经典团队口号
2014/06/06 职场文书
班主任高考寄语
2015/02/26 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
python 学习GCN图卷积神经网络
2022/05/11 Python