制作"外部"变量"可见"在setInterval函数中

时间:2014-11-23 21:31:41

标签: javascript setinterval clearinterval

在此代码中:

  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

1 个答案:

答案 0 :(得分:0)

看起来是因为value是更新内部的一个变量,并且你试图在另一个函数中使用它(它尚未被声明,因此该函数不知道它存在)。

如果可以,你会更好,在更新功能之外声明“值”的值。

或者,您可以将“value”作为参数传递给setInterval上调用的函数。