我不能为我的生活了解这里发生的事情。我试图在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);
});
答案 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对象。对于函数的this
和call
,这是相同的。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
在这里编辑的小提琴:http://jsfiddle.net/v2zc6mtm/6/