为什么添加参数后停止功能

Why Parameter Stops Function When Added

我有一个代码,我正在尝试使用函数中的参数执行,即 -

function startFadeEffect(elem){ };

我已经使 elem 等于全局范围内的变量 b,其中 b 是一个图像数组。含义-

var elem = b[imgNumb];

imgNumb 是一个变量,全局为“0”,在函数内部定义为

imgNumb = imgNumb + count;

现在,我当前的代码 "without" 参数工作完美 -

function startFadeEffect(){
    var opacSetting = noOpac / 10;
    b[imgNumb].style.opacity = opacSetting; 
    b[imgNumb].style.display = "block";
    noOpac++;
    if(noOpac < 0){
        opacSetting = 0;    
    }
    if(opacSetting == 1){
        clearTimeout(timer);
        b[imgNumb].style.opacity = 1;
        noOpac = 0;
        return false;
    }
    var timer = setTimeout(startFadeEffect, 75);
}

但是,当我使用这样的参数时,它对我不起作用:(

function startFadeEffect(elem){
    var opacSetting = noOpac / 10;
    elem.style.opacity = opacSetting;   
    elem.style.display = "block";
    noOpac++;
    if(noOpac < 0){
        opacSetting = 0;    
    }
    if(opacSetting == 1){
        clearTimeout(timer);
        elem.style.opacity = 1;
        noOpac = 0;
        return false;
    }
    var timer = setTimeout(startFadeEffect(elem), 75);
}

请注意,我已经在文件的全局范围内定义了 elem 变量。另外,我只是在寻找一个 JS 解决方案,没有像 JQuery 这样的库!谢谢

这部分不正确:

setTimeout(startFadeEffect(elem), 75);

应该是:

setTimeout(function () {
    startFadeEffect(elem);
}, 75);

setTimeout 需要一个函数作为它的第一个参数。 startFadeEffect(elem) 立即执行(return 不是函数)。所以发生的事情是 startFadeEffect 递归调用自身直到 opacSetting == 1 中断递归。