JavaScript匿名函数内存分配和垃圾分配

时间:2015-03-12 11:40:21

标签: jquery ajax extjs jslint

// This is a Framework Method 
function ajaxJSONType(uri, reqtype , reqJSON , callback){
    var url : uri; 

    $jq.ajax({

    url: uri,
    type: reqtype,
    data:reqJSON ,
    dataType: ResponseDataType.JSON,
    sucess: function(data){
        // do some validation on response data and call the callback function 
        callback(data);
    },

    }); 
}

每个开发人员都会从他们的代码中调用此方法

第一种方法:

function MyMethod(){
       var reqdata = {};
       ajaxJSONType(serviceUri , ReqType.POST,function(responsedata){

                // Here some processing on the response will occur 

           });
}

这里回调方法是一个用于解析响应和进程的匿名函数。

第二种方法:

function MyMethod(){
    var reqdata = {};
    ajaxJSONType(serviceUri , ReqType.POST,myCallbackFun);
}


function  myCallbackFun(responsedata){

     // Here some processing on the response will occur  

}

我的问题:

如果MyMethod在短时间内被召唤超过1000次......

Will it good to have the anonymous function or named function ? 

The First approch will create function object 1000 times ?

 I saw in JSLINT , we should not create anonymous function inside a loop.    
  here though we dont have any loop the MyMethod will be called many times by other events. So it is also like a Loop. 

我正在使用IE 9浏览器。

1 个答案:

答案 0 :(得分:0)

  

我在JSLINT中看到,我们不应该在循环中创建匿名函数。

JSLint中的reason for the warning可能是对循环中函数创建的闭包的误解。它与性能无关。

  

拥有匿名函数或命名函数会不会很好?

正如您所提到的,通过将函数表达式直接传递给调用,每次调用MyMethod时,引擎都必须创建该函数的新副本。因此,在这种情况下,最好使用函数声明。但是,不要陷入过早的优化......你不太可能注意到任何真正的性能提升。