Javascript 将参数与setInterval一起使用会将其反转
我一生都无法理解这里发生了什么。我试图在setInterval中使用function.bind来传递一些变量。发生的情况是,只传递了一个参数,它正在替换第一个参数。我想可能是我误用了bind,或者是。bind与jquery的。bind冲突?在这一点上我一无所知 请打开控制台,查看单击div时发生的情况 多谢各位Javascript 将参数与setInterval一起使用会将其反转,javascript,jquery,Javascript,Jquery,我一生都无法理解这里发生了什么。我试图在setInterval中使用function.bind来传递一些变量。发生的情况是,只传递了一个参数,它正在替换第一个参数。我想可能是我误用了bind,或者是。bind与jquery的。bind冲突?在这一点上我一无所知 请打开控制台,查看单击div时发生的情况 多谢各位 我相信Bind不像你想的那样工作。Bind用于将此注入到执行上下文中。如果不关心此问题,则不允许传递参数。为了传递参数,您需要使用这样的匿名函数 var-testA,testB; c
我相信Bind不像你想的那样工作。Bind用于将
此
注入到执行上下文中。如果不关心此问题,则不允许传递参数。为了传递参数,您需要使用这样的匿名函数
var-testA,testB;
console.log=function(arg){$(“#console”).html(arg)}//仅用于演示代码段
函数myFunc(testA,testB){
log(“testA是:“+testA+”testB是:“+testB”);
}
myInterval=setInterval(函数(){myFunc(testA,testB);},5000);
$('#myDiv')。单击(函数(){
testA=“foo”;
testB=“bar”;
myFunc(testA,testB);
clearInterval(myInterval);
myInterval=setInterval(函数(){myFunc(testA,testB);},5000);
});代码>
安慰
单击您将错过bind
的这个参数,因此您应该编写如下内容:
myInterval = setInterval(myFunc.bind(this, testA, testB), 5000);
此
可以是任何JS对象。这与函数的调用
和应用
相同
看
这里是您编辑的fiddle:将this
作为第一个变量传递到setInterval绑定调用中,即myInterval=setInterval(myFunc.bind(this,testA,testB),5000)代码>避免使用.bind()
,因为它不向后兼容setInterval()
接受匿名函数或函数名(如变量)或.bind()
的结果,我不建议这样做。像这样包装:setInterval(function(){myFunc(testA,testB)},5000)代码>@PHPglue-这是不正确的。bind工作的原因是它是一个函数句柄,setInterval也接受它。此外,你的例子也行不通。绑定本身不是一个函数调用。它返回一个函数。因此,代码永远不会导致任何事情发生。此外,.bind(testA,testB)
与OP对bind
的误解是一样的,你可以从Nicolas或ScottW那里看到关于正确使用它的解释<代码>测试
在您的代码中将成为此上下文,testB
将被传递到testA
并且testB
将接收未定义的代码。老实说,Nicolas Alberts代码可以工作,它在最新的FF上工作,这就是我的客户正在使用的所有代码。:)@tdoakiiii-在这种情况下使用bind没有任何意义,是一种不好的做法,因为它浪费资源。我很想听到关于这个答案不准确的解释。bind()会将这些论点进行咖喱化,并将其冻结,通常不需要额外的anon包装。@dandavis“冻结”这是一种不正确的表达方式<代码>绑定
在函数绑定的当前执行上下文中替换此
。然而,这是最微创的部分。它还需要手动构建函数对象来进行大量设置。使用“anon包装器”或匿名函数比bind占用的空间小得多。在这里使用bind是过分的,因为当从未使用上下文时,设置新函数对象的所有额外工作都被浪费了。Bind不能消除匿名函数的需要。如果Bind不能消除对anon的需要,为什么接受的答案不使用anon?我也看不出bind()创建的函数对象比anon literal创建的函数对象要重多少…@dandavis-接受的答案只显示了OP的选择,即在调用方法时更正一个简单的语法错误。接受答案并不意味着过程是正确的或最佳实践,但这是一个元问题。也许你应该做一些自我教育,这样你就知道匿名函数和bind创造的东西之间的区别了。如果mozilla手册没有吓倒我,那么我可能会花3秒钟以上的时间来RTFM。。。非常感谢。
myInterval = setInterval(myFunc.bind(this, testA, testB), 5000);