gpt4 book ai didi

javascript - JavaScript 和匿名函数中闭包的细节

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:31 26 4
gpt4 key购买 nike

此代码导致 "!" 被记录在控制台上。

var g = {};
(function() {
var t = this;
t.x = "x";
g.a = function() {
console.log(t.x);
};
})();

(function() {
var t = this;
t.x = "!";
g.b = function() {
console.log(t.x);
};
})();

g.a();

匿名函数是否共享一个this?我使用 this 错了吗?我真的不明白这里发生了什么。

我希望 g.a() 继续返回第一个匿名函数中定义的 x 的值。

如果有不同,我会使用 node.js。

最佳答案

在立即函数中,this 指的是 global object [docs] .所以在这种情况下,在两个函数中 this 确实引用了相同的元素,并且您正在用第二次调用覆盖 x

this 指的是什么对象取决于函数的调用方式。

  • 如果您只是使用funcName(); 执行一个函数,那么this 指的是全局对象
  • 如果将函数分配给对象的属性,obj.funcName()this 引用该对象。
  • 如果您使用 new 运算符调用函数,new funcName();this 指的是一个继承自函数原型(prototype)。

您还可以使用 call [docs] 显式设置 thisapply [docs] .


您可以在两个函数中创建一个新对象,而不是引用 this:

var t = {};

附加说明:无论您是在浏览器中还是使用 node.js 运行代码都没有区别。全局对象是规范的一部分,必须由执行环境提供。在浏览器中它是 window 对象,我不知道它在 node.js 中是什么,但只要它遵循规范就没关系。

关于javascript - JavaScript 和匿名函数中闭包的细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559414/

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