2015-05-14 62 views
0

我有一個函數獲取函數作爲參數並測量該函數的時間執行 。但是作爲參數傳遞的函數不能執行並且給我:Uncaught TypeError:testFunc不是函數。傳遞函數作爲參數並執行它

function measureTimeExecution(domID, testFunc){ 
//console.log(testFunc); 
console.time("timer"); 
for(var i = 0; i < 10; i++){ 
    testFunc(); 
    var getDiv = document.getElementById(domID); 
    getDiv.empty(); 
} 
console.timeEnd("timer"); 

}

清潔DOM執行的

HTMLElement.prototype.empty = function() { 
     var that = this; 
     while (that.hasChildNodes()) { 
      that.removeChild(that.lastChild); 
     } 
    }; 

實施例:

measureTimeExecution("div1", createList_Task_2()); 

createTask_List_2功能:

function createList_Task_2(){ 
var createNewUL = document.createElement("ul"); 
createNewUL.id = "phoneList"; 
document.getElementById("div1").appendChild(createNewUL); 
for(var i = 0; i < phones.length;i++){ 

    var createNewLi = document.createElement("li"); 
    var chunk = "<li>" + phones[i].age +"</li><br><li>" + phones[i].id +"</li><br><img src='" 
     + phones[i].imageUrl +"'/></li><br><li>" + phones[i].name + "</li><br><li>" + phones[i].snippet + "</li>"; 

    createNewLi.innerHTML+= chunk; 
    document.getElementById("phoneList").appendChild(createNewLi); 
} 

EDITED

我發現爲什麼它沒有工作,我沒有注意在此之前,函數執行是一些舊的代碼,我忘了刪除。現在它運行良好。感謝您的答覆

+0

如何你打電話'measureTimeExecution'什麼樣子的? –

+0

我添加了示例 – qr11

+0

您的'createList_Task_2'函數在哪裏定義? – jcuenod

回答

0

嘗試沒有括號:

measureTimeExecution("div1", createList_Task_2); 

當包括支架,你是不是傳遞功能;您正在執行該函數並傳遞其返回值。如果沒有括號(如圖所示),您只需傳遞一個函數的引用,然後您可以使用measureTimeExecution函數使用testFunc()調用該函數。

這不是很漂亮,但this fiddle顯示它是如何完成的。

+0

它給出了相同的錯誤 – qr11

+0

您確定已經定義了'function createList_Task_2(){}'某處嗎?看看錯誤發生的那一行,第一次可能在你的'measureTimeExecution'行,並且在使用我的建議之後它在'testFunc()'行。 – jcuenod

0

首先,您應該能夠將該函數作爲參數傳遞。

從你的代碼中我看不到你什麼時候實際運行measureTimeExecution,並且你沒有顯示你的testFunc的定義。

確保您已將testFunc定義爲函數,並且可以通過measureTimeExecution訪問。

Uncaught TypeError:testFunc不是一個函數,通常意味着testFunc超出範圍或未被定義爲函數。

+0

和是不通過testFunc括號,如jcuenod說。 試試這個: console.log(typeof createList_Task_2); measureTimeExecution(「div1」,createList_Task_2); 並告訴我控制檯日誌返回的內容 –

0

你是怎麼稱呼measureTimeExecution的?

你需要做的:

measureTimeExecution("div",function() { /*sometingh*/ }); 

function aFunction(){ /*something*/} 
measureTimeExecution("div",aFunction);