为什么在对象文字中自我调用函数?

时间:2014-07-21 20:10:36

标签: javascript jquery setinterval

jQuery(为简单起见,支离破碎)

interval 属性包含一个setInterval()函数,在对象文字滑块中,在interval中定义的setInterval()正在调用自身,或者至少看起来像是的,但为什么呢?

 var slider = {
    config : function(imgs, callback){
        //mandatory
        var images = $(imgs);

        //optional
        var animationInterval;
        var animationTime;

        callback(images);            
    },
    target : 0,
    get lastElem(){
        return this.images.length-1;
    },
    interval : setInterval(function () {
       setSlider();
    }, 3000)
};

slider.config('ul.images li', setConfig);
slider.images.hide().first().show();

function setConfig(imgs){
   slider.images = imgs;
}

function setSlider(dest) { 
    slider.target === slider.lastElem ? slider.target = 0 : slider.target++;        
    slider.images.hide().eq(slider.target).fadeIn(1000);
    slider.triggers.removeClass('active').eq(slider.target).addClass('active');
}

JSFiddle

2 个答案:

答案 0 :(得分:4)

当您创建对象文字时,您键入的值将被计算为表达式。

function square(x) {
  return x * x;
}

var lookup = {
  'two': square(2)
};

console.log(lookup['two']); // 4

在此,您需要拨打setInterval而不是squaresetInterval采用函数和句点并安排该函数重复运行。它返回调度的数字标识符,以便您稍后可以使用clearInterval将其停止。例如,您可以稍后执行clearInterval(slider.interval);以停止调用setSlider。

答案 1 :(得分:1)

在当前代码中,您将setInterval()的结果分配给interval属性。我建议将setInterval()调用包装在一个函数中,如下所示:

interval : function() {
        setInterval(function() {
            setSlider();
        }, 3000);
}

然后,您应该可以致电slider.interval()