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学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
js命名空间写法示例
Dec 18 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
Oct 20 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
Jul 06 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
Sep 20 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
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
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python类和继承用法实例
2015/07/07 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
详解python3中zipfile模块用法
2018/06/18 Python
python-str,list,set间的转换实例
2018/06/27 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
python属于跨平台语言码
2020/06/09 Python
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
火灾现场处置方案
2014/05/28 职场文书
2014年国庆节寄语
2014/09/19 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
甲午大海战观后感
2015/06/02 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技