2016-03-07 25 views
0

我有我试图在函数中使用的参数来执行代码,即 -为什么参数停止功能当添加

function startFadeEffect(elem){ }; 

我已经做了ELEM等于变量b在全球范围内,其中b是一组图像。含义 -

var elem = b[imgNumb]; 

imgNumb是一个变量,它是全球范围内的“0”和一个函数内部被定义为

imgNumb = imgNumb + count; 

现在,我当前的代码“不”参数完美的作品 -

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的库!由于

+0

你是如何调用函数...? “不起作用”是什么意思?任何错误?你检查过了吗? – deceze

回答

2

这部分是不正确的:

setTimeout(startFadeEffect(elem), 75); 

它应该是:

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

setTimeout预期的功能,因为它是第一个参数。 startFadeEffect(elem)立即执行(并且不返回函数)。那么会发生什么,startFadeEffect递归调用自己,直到opacSetting == 1它打破递归。

+0

我会使用'startFadeEffect.bind(null,elem)'而不是匿名函数包装,但是,差别是相同的...... – deceze

+0

这是我个人的偏好。由于我们没有明确的'thisArg'目标,所以使用'bind'感觉有点不合适。 – Halcyon

+0

当然,只是指出(IMO更具可读性)的选择。 – deceze