首页 > 其他 > 详细

函数上下文

时间:2020-08-26 19:22:24      阅读:87      评论:0      收藏:0      [点我收藏+]

当进入执行上下文时,这时候还没有执行代码,

变量对象会包括:

函数的所有形参 (如果是函数上下文)

1.由名称和对应值组成的一个变量对象的属性被创建

2.没有实参,属性值设为 undefined

函数声明

1.由名称和对应值(函数对象(function-object))组成一个变量对象的属性被创建

2.如果变量对象已经存在相同名称的属性,则完全替换这个属性

变量声明

1.由名称和对应值(undefined)组成一个变量对象的属性被创建;

2.如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性

 

进入执行上下文时,首先会处理函数声明,其次会处理变量声明,

如果如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性。

即如果函数名与变量名相同,变量不会干扰函数

function foo() {
    console.log(a);
    a = 1;
}

foo(); // ???

function bar() {
    a = 1;
    console.log(a);
}
bar(); // ???

第一段会报错:Uncaught ReferenceError: a is not defined

第二段会打印:1

这是因为函数中的 "a" 并没有通过 var 关键字声明,所有不会被存放在 AO 中。

第一段执行 console 的时候, AO 的值是:

AO = {
    arguments: {
        length: 0
    }
}

没有 a 的值,然后就会到全局去找,全局也没有,所以会报错。

当第二段执行 console 的时候,全局对象已经被赋予了 a 属性,这时候就可以从全局找到 a 的值,所以会打印 1。

函数上下文

原文:https://www.cnblogs.com/ssszjh/p/12926638.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!