函数被调用发生了什么?

 我来答
科创17
2022-07-24 · TA获得超过5906个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:176万
展开全部

函数被调用

执行引擎创建一个函数执行上下文环境。执行上下文环境包括变量对象,作用域链,this指针三部分。

在这里为了说明问题,我们只关心 变量对象。

在函数执行上下文中, 变量对象 是不能直接访问的

变量对象 包含普通参数(formal parameters) 与特殊参数(Arguments)对象(具有索引属性的参数映射表)。

特殊参数(Arguments)对象是通过函数的arguments属性初始化的。即arguments属性的值是Arguments对象。

创建 变量对象 的过程是这样:

1.建立特殊参数(Arguments)对象:属性名是'0'、'1'、'2'.....,属性值就是函数调用时 传入的实参 。此外arguments.length是 实际参数的个数 此时函数的形参在函数中作为局部变量存在,且与arguments中的数据共享状态(这句话极为重要!)

2.函数提升:找到 这个将要执行的函数 内的所有 函数声明 ,储存在变量对象中,属性名就是函数名, 属性值就是函数的引用 (所在的内存地址)。如果有多个同名的函数声明,后出现的函数覆盖前面的属性值。

3.变量提升:找到 这个将要执行的函数 内的所有 变量声明 ,储存在变量对象中,属性名就是变量名, 属性值是undefined

先掌握一个概念: 活动对象(activation object)

活动对象其实和变量对象是同一个东西在不同时期的两种叫法。函数还未开始执行(创建上下文的期间)时叫变量对象,函数开始执行以后就叫活动对象。

开始顺序执行函数体内的同步函数语句,此时 变量对象切换为活动对象

形参赋值和函数声明赋值在第二步已经完成了。只剩下给第二步中的普通参数中 声明过的变量进行赋值,即把undefined替换为真实值。

函数执行完销毁(没有闭包情况下)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式