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 Form.elements[i]的使用实例
Nov 13 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
javascript操作符"!~"详解
Feb 10 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
less简单入门(CSS 预处理语言)
Mar 08 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
10个在JavaScript开发中常遇到的BUG
Dec 18 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 Javascript
微信小程序自定义胶囊样式
Dec 27 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批量上传的实现代码
2013/06/09 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
js中判断控件是否存在
2010/08/25 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python登录豆瓣并发帖的方法
2015/07/08 Python
Django视图和URL配置详解
2018/01/31 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
python实现微信防撤回神器
2019/04/29 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
python 贪心算法的实现
2020/09/18 Python
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
网络事业创业计划书范文
2014/01/09 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle