Javascript 在另一个函数内更改settimeout内的变量

Javascript 在另一个函数内更改settimeout内的变量,javascript,Javascript,我试图创建一个可重用的函数,其中包含settimeout函数,它将更改传递给第一个函数的变量 let variable = true; reusablefunction = (passedvariable) => { setTimeout(() => { passedvariable = false; // this turns out true for some reason }, 1, passedvariable);

我试图创建一个可重用的函数,其中包含settimeout函数,它将更改传递给第一个函数的变量

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函数,并在一段时间后更改所述变量的值。我肯定有更好的选择,我只是没有想到。