使用setInterval参数可以反转它们

时间:2014-09-19 20:27:24

标签: javascript jquery

我不能为我的生活了解这里发生的事情。我试图在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);
});

2 个答案:

答案 0 :(得分:1)

绑定并不像你认为我相信的那样有效。绑定用于将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>

答案 1 :(得分:1)

您错过了this的{​​{1}}参数,因此您应该写下这样的内容:

bind

myInterval = setInterval(myFunc.bind(this, testA, testB), 5000); 可以是任何JS对象。对于函数的thiscall,这是相同的。

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

在这里编辑的小提琴:http://jsfiddle.net/v2zc6mtm/6/