获取函数中的对象键作为值

Get object key within function as a value

我正在尝试在 javascript 中动态设置超时。在超时内,我依赖于在超时回调函数之外更改的变量。这不是一个可靠的做法,所以我想摆脱对这个变量的依赖。

这是适用于我的问题的代码摘录:

timeouts["mr"+mI] = setTimeout(function(){
    groups["mr"+mI].expired = 1;
    io.sockets.emit("invite_channel",'{"type":"pullback","mI":"mr'+mI+'"}');
},120000);

mIsetTimeout 之外更改,并且与 timeouts["mr"+mI].

声明中的 mI 相同

所以我的问题是,如何从 timeouts[](在 setTimeout 回调函数内部)获取对象键,以替代 mI

提前致谢!


我认为这两个答案(在撰写本文时)都解决了我的问题。我选择了使用 bind() 的答案作为接受的答案。这主要是因为我(还)不明白 closed method 答案是如何工作的。我试图实现它,但没有让它发挥作用。它的另一个答案很容易实现。

谢谢两位回答者! :-)

我不确定我是否正确理解了问题,但是如果您想将 mI 传递给回调并防止它发生变化。您可以使用 bind() 方法。

timeouts["mr"+mI] = setTimeout(function(x){
    groups["mr"+x].expired = 1;
    io.sockets.emit("invite_channel",'{"type":"pullback","mI":"mr'+x+'"}');
}.bind(this,mI),120000);

bind(this,mI) 会将 mI 作为参数传递给函数。一旦声明了函数,x 的值就不会改变。

您需要为从 setTimeout 调用的方法捕获 mI 的当前值。您可以关闭该值,以便将来对 mI 的修改不会更改将来调用的方法中捕获的值。

var mI = Math.random();
var getMethod = function() {
  var mrMi = mI;
  return function() {
    alert(mrMi);
  };
};

var closedMethod = getMethod();

setTimeout(closedMethod, 0);
mI = 'abc';
setTimeout(closedMethod, 0);