gpt4 book ai didi

javascript - 当我们把一个方法存入一个变量然后调用它的时候,为什么context对象变成了全局的window对象呢?

转载 作者:行者123 更新时间:2023-11-30 12:44:09 25 4
gpt4 key购买 nike

下面的例子取自jqfundamentals,

var person = {
firstName : 'Boaz',
lastName : 'Sender',
greet : function() {
log( 'Hi, ' + this.firstName );
}
};

var sayIt = person.greet; // store the method in a variable

sayIt(); // logs 'Hi, undefined' -- uh-oh

作为解释,

当我们将 .greet() 方法存储在变量 sayIt 中,然后调用 sayIt() 时,上下文对象变为全局窗口对象,而不是 person 对象。由于 window 对象没有属性 firstName,因此当我们尝试访问它时会得到 undefined。

我的问题是

当我们将 .greet() 方法存储在一个变量 sayIt 中,然后调用 sayIt() 为什么上下文对象会变为全局窗口对象?

最佳答案

这是规范,参见 ecma-262/5.1/#sec-10.4.3

The following steps are performed when control enters the executioncontext for function code contained in function object F, a callerprovided thisArg, and a caller provided argumentsList:

  1. If the function code is strict code, set the ThisBinding to thisArg.
  2. Else if thisArg is null or undefined, set the ThisBinding to the global object.

.......

所以在严格模式时,this会引用undefined,否则会引用全局对象。

关于javascript - 当我们把一个方法存入一个变量然后调用它的时候,为什么context对象变成了全局的window对象呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com