获取函数中的对象键作为值
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);
mI
在 setTimeout
之外更改,并且与 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);
我正在尝试在 javascript 中动态设置超时。在超时内,我依赖于在超时回调函数之外更改的变量。这不是一个可靠的做法,所以我想摆脱对这个变量的依赖。
这是适用于我的问题的代码摘录:
timeouts["mr"+mI] = setTimeout(function(){
groups["mr"+mI].expired = 1;
io.sockets.emit("invite_channel",'{"type":"pullback","mI":"mr'+mI+'"}');
},120000);
mI
在 setTimeout
之外更改,并且与 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);