在此代码中:
update: function(e,d) {
var element = $(this);
var data = element.data();
var actor = element.find('.actor');
var value = basicdesign.defaultUpdate( e, d, element, true );
var on = templateEngine.map( element.data( 'threshold_value' ), element.data('mapping') );
// value >= threshold
if (value >= on){
var maxcount = data.count;
var interval = data.interval;
var audioWidget = document.getElementById(element.data('id'));
if (audioWidget.paused == true){
if (maxcount && interval) {
var numOfCalls = 0;
audioWidget.play();
var intervalID = setInterval(function () {
audioWidget.play();
numOfCalls = numOfCalls + 1 ;
if (numOfCalls == maxcount-1) clearInterval(intervalID);
if **(value < on)** clearInterval(intervalID);
}, interval);
}
else audioWidget.play();
}
};
// value < then threshold
if (value < on){
var audioWidget = document.getElementById(element.data('id'));
audioWidget.pause();
};
}
我不能在setInterval函数中使用value和on。我现在,也许解决方案是一个闭包 - 但是如何???
(这是来自cometvisu(audio.js)的代码片段,一个开源视频)
THX
答案 0 :(得分:0)
看起来是因为value是更新内部的一个变量,并且你试图在另一个函数中使用它(它尚未被声明,因此该函数不知道它存在)。
如果可以,你会更好,在更新功能之外声明“值”的值。
或者,您可以将“value”作为参数传递给setInterval上调用的函数。