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 相关文章推荐
通过修改referer下载文件的方法
May 11 Javascript
js保存当前路径(cookies记录)
Dec 14 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
AngularJS中$apply方法和$watch方法用法总结
Dec 13 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
Less 安装及基本用法
May 05 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 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 register_shutdown_function函数的深入解析
2013/06/03 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
jQuery技巧总结
2011/01/01 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
python正则表达式re模块详解
2014/06/25 Python
Sanic框架路由用法实例分析
2018/07/16 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
蒂娜商店:Tiina the Store
2019/12/07 全球购物
幼儿园教师培训方案
2014/02/04 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
政审证明范文
2015/06/19 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
Python开发五子棋小游戏
2022/04/28 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android