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 函数的执行过程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...