将函数作为参数传递并执行

时间:2015-05-14 11:05:03

标签: javascript

我有一个函数,它将函数作为参数并测量时间执行 那个功能。但是作为参数传递的函数无法执行并给我: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

我发现为什么它没有起作用我之前没有注意到功能执行是一些我忘记删除的旧代码。现在运行正常。感谢您的回复

3 个答案:

答案 0 :(得分:0)

尝试不带括号:

measureTimeExecution("div1", createList_Task_2);

当您包含括号时,您不能通过该功能;您正在执行该函数并传递其返回值。如果没有括号(如图所示),您只需传递对该函数的引用,然后您可以使用measureTimeExecutiontestFunc()函数中调用该函数。

它并不漂亮,但this fiddle显示了它是如何完成的。

答案 1 :(得分:0)

首先,您应该能够将该函数作为参数传递。

从你的代码中我看不到你何时实际运行了measureTimeExecution并且你没有显示你对testFunc的定义。

确保已将testFunc定义为函数,并且可以通过measureTimeExecution访问它。

未捕获的TypeError:testFunc不是函数通常意味着testFunc超出范围或未定义为函数。

答案 2 :(得分:0)

你是怎么称呼measureTimeExecution的?

你需要这样做:

4

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