将参数与setInterval一起使用可反转这些参数

Using parameters with setInterval reverses them

本文关键字:参数 可反转 一起 setInterval      更新时间:2023-09-26

我一辈子都无法理解这里发生了什么。我正试图在setInterval中使用function.bind来传递一些变量。现在只传递了一个参数,并且它正在替换第一个参数。我想我可能是滥用了bind,或者说.bind和jquery的.bind冲突了?在这一点上我一无所知。

请打开控制台,看看当你点击div.时会发生什么

谢谢。

http://jsfiddle.net/v2zc6mtm/5/

    var testA, testB;
function myFunc(testA, testB) {
    console.log("testA is : " + testA + " testB is : " + testB);
}
myInterval = setInterval(myFunc.bind(testA, testB), 5000);
$('#myDiv').click(function () {
    testA = "foo";
    testB = "bar";
    myFunc(testA, testB);
    clearInterval(myInterval);
    myInterval = setInterval(myFunc.bind(testA, testB), 5000);
});

您错过了bindthis参数,因此您应该编写以下内容:

myInterval = setInterval(myFunc.bind(this, testA, testB), 5000);

this可以是任何JS对象。这对于函数的callapply是相同的。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

这是你编辑过的小提琴:http://jsfiddle.net/v2zc6mtm/6/

绑定不会像你认为的那样工作。Bind用于将this注入到执行上下文中。如果this不是问题,则不用于传递参数。为了传递参数,您将希望使用像以下这样的匿名函数

var testA, testB;
console.log = function(arg){$("#console").html(arg);}//used only for demo snippet
    function myFunc(testA, testB) {
     console.log("testA is : " + testA + " testB is : " + testB);
    }
    myInterval = setInterval(function(){ myFunc(testA, testB); }, 5000);
    $('#myDiv').click(function () {
     testA = "foo";
     testB = "bar";
     myFunc(testA, testB);
     clearInterval(myInterval);
     myInterval = setInterval(function(){ myFunc(testA, testB); }, 5000);
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="border:1px solid black;padding:8px">
	<h3>Console</h3>
    <div id="console"></div>
</div>
<div id="myDiv">Click</div>