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 相关文章推荐
Angular中的Promise对象($q介绍)
Mar 03 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
Aug 21 Javascript
Vue.js每天必学之过渡与动画
Sep 06 Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
Jan 19 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
使用命令行工具npm新创建一个vue项目的方法
Dec 27 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
Jun 10 Javascript
送你43道JS面试题(收藏)
Jun 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
PHPMailer 中文使用说明小结
2010/01/22 PHP
php一个找二层目录的小东东
2012/08/02 PHP
php调用C代码的实现方法
2014/03/11 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
js制作提示框插件
2020/12/24 Javascript
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
python的unittest测试类代码实例
2017/12/07 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
纪念建党演讲稿范文
2014/01/13 职场文书
投资合作协议书范本
2014/04/17 职场文书
个人委托书范本
2014/09/13 职场文书
学校运动会简讯
2015/07/20 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js