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获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
May 13 Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
AngularJS基础 ng-options 指令详解
Aug 02 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
对称加密与非对称加密优缺点详解
Feb 06 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
vue+webpack实现异步组件加载的方法
Feb 03 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 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
从wamp到xampp的升级之路
2015/04/08 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
jquery实现图片预加载
2015/12/25 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python定时执行指定函数的方法
2015/05/27 Python
Python进程间通信用法实例
2015/06/04 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
python操作yaml说明
2020/04/08 Python
keras多显卡训练方式
2020/06/10 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
技校教师求职简历的自我评价
2013/10/20 职场文书
教师评优事迹材料
2014/01/10 职场文书
校园达人秀策划书
2014/01/12 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python