Javascript 在另一个函数内更改settimeout内的变量
我试图创建一个可重用的函数,其中包含settimeout函数,它将更改传递给第一个函数的变量Javascript 在另一个函数内更改settimeout内的变量,javascript,Javascript,我试图创建一个可重用的函数,其中包含settimeout函数,它将更改传递给第一个函数的变量 let variable = true; reusablefunction = (passedvariable) => { setTimeout(() => { passedvariable = false; // this turns out true for some reason }, 1, passedvariable);
let variable = true;
reusablefunction = (passedvariable) => {
setTimeout(() => {
passedvariable = false;
// this turns out true for some reason
}, 1, passedvariable);
};
// Change value of passed variable (variable) to false after a timeout
reusablefunction(variable);
你不能。当你这样做的时候
reusableFunction(variable);
变量
的值被传递到函数中,而不是变量本身。参数passedVariable
未以任何方式连接到variable
。也就是说,你在内存中会有这样的结果:
+−−−−−−−−−−−−−−−−−+
| variable: false |
+−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−+
| passedVariable: false |
+−−−−−−−−−−−−−−−−−−−−−−−+
这样,你的记忆中就会出现这样的东西:
+−−−−−−−−−−−−−−−+
| obj: Ref55461 |−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+ |
| +−−−−−−−−−−−−−+
+−−−−−−−−−>| Object |
| +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+ | | prop: false |
| passedObject: Ref55461 |−−−−+ +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+
|对象:参考文献55461|−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+ |
| +−−−−−−−−−−−−−+
+−−−−−−−−−>| 反对|
| +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+ | | 道具:假|
|传递对象:参考文献55461|−−−−+ +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+
由于obj
和passedObject
都引用同一个对象,因此您可以通过它们中的任何一个来更改其属性
也就是说,可能有更好的方法来解决您试图解决的潜在问题…您不能。当你这样做的时候
reusableFunction(variable);
变量
的值被传递到函数中,而不是变量本身。参数passedVariable
未以任何方式连接到variable
。也就是说,你在内存中会有这样的结果:
+−−−−−−−−−−−−−−−−−+
| variable: false |
+−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−+
| passedVariable: false |
+−−−−−−−−−−−−−−−−−−−−−−−+
这样,你的记忆中就会出现这样的东西:
+−−−−−−−−−−−−−−−+
| obj: Ref55461 |−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+ |
| +−−−−−−−−−−−−−+
+−−−−−−−−−>| Object |
| +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+ | | prop: false |
| passedObject: Ref55461 |−−−−+ +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+
|对象:参考文献55461|−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−+ |
| +−−−−−−−−−−−−−+
+−−−−−−−−−>| 反对|
| +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+ | | 道具:假|
|传递对象:参考文献55461|−−−−+ +−−−−−−−−−−−−−+
+−−−−−−−−−−−−−−−−−−−−−−−−+
由于obj
和passedObject
都引用同一个对象,因此您可以通过它们中的任何一个来更改其属性
也就是说,可能有更好的方法来解决您试图解决的潜在问题……Javascript的工作方式,但这是不可能发生的。这听起来像。通过这样做,你想要解决的根本问题是什么?看起来这对你来说不再是一个X/Y问题,因为你已经回答了@T.J.Crowder。。是吗?@ArupRakshit-我回答了问题(Y)。虽然这可能有点帮助,但我怀疑如果我们知道潜在的问题是什么(X),我们可能会为它提供更好的解决方案。我正在尝试创建可重用函数,该函数将接受varible,运行timeout函数,并在一段时间后更改所述变量的值。我肯定有一些更好的选择,我只是没有弄明白。以Javascript的工作方式,这是不可能发生的。这听起来像。通过这样做,你想要解决的根本问题是什么?看起来这对你来说不再是一个X/Y问题,因为你已经回答了@T.J.Crowder。。是吗?@ArupRakshit-我回答了问题(Y)。虽然这可能有点帮助,但我怀疑如果我们知道潜在的问题是什么(X),我们可能会为它提供更好的解决方案。我正在尝试创建可重用函数,该函数将接受varible,运行timeout函数,并在一段时间后更改所述变量的值。我肯定有更好的选择,我只是没有想到。