2015-05-29 52 views
1
var scaleJssor = new Array(); 
for(myloop=0; myloop<jssor_slider.length; myloop++) 
{ 
    scaleJssor.push(
     function() { 
      var parentWidth = jssor_slider[myloop].$Elmt.parentNode.clientWidth; 

      if (parentWidth) 
       { 
        //alert("executing ScaleSlider"); 
        jssor_slider[myloop].$SetScaleWidth(Math.max(Math.min(parentWidth-100, 960), 230)); 
       } 
      else 
        window.setTimeout(<here I want to pass this function>, 30); 

       }); 

} 

以上只是一個代碼片段,我只是想知道我怎麼可以通過setTimeout()函數,其中函數是匿名的內部函數,我知道如果我給我可以輕鬆傳遞的函數命名,但我想通過不給任何函數名稱的方式。如何調用內它的功能,而其匿名函數

+1

在循環內定義函數不是很好的做法。這意味着函數需要在循環的每次迭代中創建。最好在循環之外定義它,然後在循環中調用它。 – Craicerjack

+1

我個人發現我已經開始迴避匿名函數。在查看控制檯錯誤時,只需查看函數名稱並在源代碼中搜索/跳轉即可。匿名函數只是一個觸摸*更難調試。 –

+0

@Craicerjack,我需要這個循環,因爲我沒有定義一個特定的函數,我正在定義一個函數數組。 –

回答

1

雖然這不是一個足夠好的代碼,因爲您在循環中反覆定義相同的函數。你應該已經定義了循環外的函數。我只是回答你的setTimeout()函數的問題。 如果您將參數傳遞給函數,以下方法可能會有好處。

function ScaleJssor(k) { 
      var parentWidth = jssor_slider[k].$Elmt.parentNode.clientWidth; 

      if (parentWidth) 
       { 
        //alert("executing ScaleSlider"); 
        jssor_slider[k].$SetScaleWidth(Math.max(Math.min(parentWidth-100, 960), 230)); 
       } 
      else 
        window.setTimeout(function(){ScaleJssor(k)}, 30); 

       } 

我想如果你在你的例子中使用上面的代碼,你不需要使用循環。

+0

這是我查詢的完美解決方案。非常感謝。它達到了我的目的,解決了我所有的額外疑問。非常感謝。 –

0

在setTimeout中調用函數。 check this

setTimeout(function(){ alert("Hello"); }, 3000); 

其他

var myVar; 

function myFunction() { 
    myVar = setTimeout(alertFunc, 3000); 
} 

function alertFunc() { 
    alert("Hello!"); 
} 
+0

其實我想調用它內部的相同函數,當函數有一個名字的時候,這當然是可能的,就像在我的例子中我可以寫myVar = setTimeout(myFunction,3000)一樣。但在我的例子中,它是一個匿名函數。所以我想知道我怎麼能得到同樣的東西,我怎麼能通過setTimeout()函數內的匿名函數。這就是我的問題。 –

+0

好的,'arguments.callee'是我想的一個選項。查看[fiddle](https://jsfiddle.net/gxoxn6cg/7/)。 – AVM

+0

請不要使用'arguments.callee'它的deprecated.check [this](http://stackoverflow.com/questions/12050183/javascript-arguments-callee-what-is-it-for) – AVM

1

可以用下一

someCode(function funcName() { 
    // here you can access to function with funcName 

}); 

這是下一個案例工程

var a = function b() { 
    // here your function can be access with a or b 
    // but 'b' garantee you that you call current function 
    // and 'a' not - cause at code below you can redefine a-value to another one 
    // also you can get function by 'b' outside function - it works only inside 
} 

檢查在這裏http://jsbin.com/rakupayaxo/1/edit?js,output

+0

好的,謝謝你的回覆。所以我在某個時候得到了這個函數的名字來稱呼它。是嗎 ? –

+0

幾乎 - 當你 - 也可以通過'b'功能獲得功能 - 它只在裏面工作 - 檢查這個評論。當你在這樣的語法中添加名字 - 這個名字只能在函數內部使用 - 其他代碼 - 不能使用它 –

相關問題