gpt4 book ai didi

javascript - JavaScript 匿名函数中的 this 值

转载 作者:行者123 更新时间:2023-12-03 00:39:09 24 4
gpt4 key购买 nike

有人可以向我解释为什么A为真而B为假吗?我本来期望 B 也是如此。

function MyObject() {

};

MyObject.prototype.test = function () {
console.log("A", this instanceof MyObject);
(function () {
console.log("B", this instanceof MyObject);
}());
}

new MyObject().test();

更新:从 ecmascript-6 开始,您可以使用箭头函数,这样可以轻松引用 MyObject,如下所示:

function MyObject() {

};

MyObject.prototype.test = function () {
console.log("A", this instanceof MyObject);
(() => {//a change is here, which will have the effect of the next line resulting in true
console.log("B", this instanceof MyObject);
})(); //and here is a change
}

new MyObject().test();

最佳答案

在匿名函数内 this 是全局对象。

test 内部,这是调用该方法的 MyObject 实例。

<小时/>

每当你调用这样的函数时:

someFunction(); // called function invocation

this始终 全局对象,或者在严格模式下是未定义(除非 someFunction 是使用 bind** — 见下文)

每当你调用这样的函数时

foo.someMethod();  //called method invocation

this 设置为 foo

<小时/>

**EcmaScript5 定义了一个 bind 函数,允许您创建一个具有 this 预设值的函数

所以这个

    var obj = { a: 12 };
var someFunction = (function () { alert(this.a); }).bind(obj);
someFunction();

导致 someFucntion 被调用,this 等于 obj,并发出警报 12。我提出这个只是为了指出这是一个我提到的关于调用函数的规则的潜在异常(exception)

someFunction();

始终使 this 等于全局对象(或在严格模式下为 undefined)

关于javascript - JavaScript 匿名函数中的 this 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670877/

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