gpt4 book ai didi

javascript - 当我将参数传递给函数时,setTimeout 不起作用

转载 作者:行者123 更新时间:2023-11-28 14:54:35 25 4
gpt4 key购买 nike

我决定制作一个简单的 Canvas 游戏,并在延迟后将 bool 变量更改为 false (从 true)。我做了一个简单的函数,如下所示:

var someVariable = true;

function changeBoolean(){
someVariable = false;
}

setTimeout(changeBoolean, 1000);

。 。 。它工作完美。但我的游戏越来越大,我不想为每个变量创建额外的函数,所以我想出了一种方法来做到这一点:

var someVariable = true;

function changeBoolean(argument) {
argument = false;
}

setTimeout(changeBoolean(someVariable),1000);

。 。 。但它不起作用。有人可以告诉我我做错了什么吗?感谢您的帮助。

最佳答案

您需要传递 setTimeout 一个函数来调用。这就是您在第一个示例中所做的,您将传递给它 changeBoolean 这是一个函数。

在第二个示例中,您调用 changeBoolean(someVariable),然后将其返回值 - undefined - 传递给 setTimeout .

您可以传递匿名函数来代替:

setTimeout(function(){
changeBoolean(someVariable);
},1000);

这实际上不起作用,因为 someVariable 将按值传递,因此所有 changeBoolean 将看到的是设置的argument truefalse,但它不知道外部哪个变量具有该值,因此它无法更改其值。

一种解决方案是将变量存储在一个对象中,然后只告诉 changeBoolean 要更改的key:

var variables = {
someVariable: true
};

function changeBoolean(argument) {
variables[argument] = false;
}

setTimeout(function(){
changeBoolean('someVariable');
},1000);

关于javascript - 当我将参数传递给函数时,setTimeout 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43353727/

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