gpt4 book ai didi

JavaScript 改变对象内部的变量

转载 作者:行者123 更新时间:2023-12-03 10:13:25 24 4
gpt4 key购买 nike

var tempOut = false;
var foo = function () {
this.tempIn = false;

this.counter = function () {
setTimeout(function () {
this.tempIn = true;
tempOut = true;
},5000);
};
};

var myFunction = new foo();
myFunction.counter();
console.log(tempOut+ " " + myFunction.tempIn);

嘿,我有一个简单的代码,可以在 5 秒后更改变量。有 2 个变量:一个全局变量 (tempOut) 和一个局部变量 (tempIn)。当我从函数 foo 创建对象,并在 5 秒后启动 counter 函数时,两个变量都应设置为 true,但只有 tempOut 发生变化。我做错了什么?

最佳答案

将代码更改为:

var foo = function () {
this.tempIn = false;
var me = this;
this.counter = function () {
setTimeout(function () {
me.tempIn = true;
tempOut = true;
},5000);
};
};

您的“this”上下文没有指向正确的对象,在浏览器中它引用 setTimeout 内的窗口。

看看这个,JS 中的范围有点令人费解:http://ryanmorr.com/understanding-scope-and-context-in-javascript/

关于JavaScript 改变对象内部的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007212/

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