星空网 > 软件开发 > Java

JavaScript 函数的执行过程

  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

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

快递马来西亚怎么寄:https://www.goluckyvip.com/tag/91700.html
寄马来西亚什么快递便宜:https://www.goluckyvip.com/tag/91701.html
寄东西到马来西亚用什么快递:https://www.goluckyvip.com/tag/91702.html
怎么往马来西亚寄快递:https://www.goluckyvip.com/tag/91703.html
马来西亚吉隆坡寄什么快递:https://www.goluckyvip.com/tag/91704.html
寄什么快递去马来西亚:https://www.goluckyvip.com/tag/91705.html
23点聊电商:新质生产力加速数字贸易发展 卓尔智联集团实现营收利润双增长 :https://www.kjdsnews.com/a/1836411.html
南京浦口都有什么好玩的地方 南京浦口都有什么好玩的地方推荐:https://www.vstour.cn/a/363180.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流