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 相关文章推荐
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
js css 实现遮罩层覆盖其他页面元素附图
Sep 22 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
详解vue中computed 和 watch的异同
Jun 30 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 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 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
vue中进行微博分享的实例讲解
2019/10/14 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python梯度下降算法的实现
2020/02/24 Python
python序列类型种类详解
2020/02/26 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
小结Python的反射机制
2020/09/28 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
异常和异常类的概念
2014/09/12 面试题
如何理解委托
2012/01/06 面试题
自考生自我鉴定范文
2013/10/01 职场文书
银行奉献演讲稿
2014/09/16 职场文书
庆七一晚会主持词
2015/06/30 职场文书
初二英语教学反思
2016/02/15 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python