Javascript Closure调用回调函数?

时间:2011-05-04 17:47:13

标签: javascript jquery

所以我有很多功能彼此非常相似。 IE时间通过闭包重构,但我遇到了问题。

我的函数框架代码是这样的(我在javascript中有大量的这个):

function getBlahOutputInThisID(param1, ...., paramN, functionName) {
    var jasonArray = {
        param1: param1,
        param2: param2,
        ...
    }
    jQuery.ajax({
        type: 'POST',
        url: '/blahController/ajax_functionName/',
        data: jasonArray,
        success: function(data) {
          //Some REALLY custom function stuff
        }
    });
}

因为我有很多这些:

我想知道我是否可以关闭

function closure(paramArray, customFUNCTION) {
    return function() {
        //getBlahOutputInThisID code (the skeleton code, look above)
    }
}

并让它在闭包中调用回调函数customFunction(jQuery.ajax({部分),即:

 success: function(data) {
          customFunction()
        }

或者这是重构代码的非常棒/坏方法吗?

编辑:感谢您的时间和精力。

3 个答案:

答案 0 :(得分:2)

我会推荐这个

  • 这将减少代码的大小,从而加快页面加载速度
  • 如果找到一些错误,你可以更容易维护这段代码,你只需要在一个地方修复它
  • 等等等

答案 1 :(得分:2)

我不确定这里需要两个级别。这就是我看到它的工作方式:

function getBlahOutputInThisID(param1, ...., paramN, functionName, ajaxCallback) {
    var jasonArray = {
        param1: param1,
        param2: param2,
        ...
    }
    jQuery.ajax({
        type: 'POST',
        url: '/blahController/ajax_functionName/',
        data: jasonArray,
        success: ajaxCallback
        }
    }); 

这样你每次都可以这样使用它:

   var a;

   getBlahOutputInThisID(param1, ...., paramN, functionName,function (data) {
      // here is all my custom stuff
      // reference var a above as a closure.
   });

答案 2 :(得分:1)

我认为这是一个好主意。一旦你知道closure功能的作用,就会更容易理解整体代码。我也不会称之为“noob”,因为对封闭的充分了解并不是真正的菜鸟。我唯一不同的是,我不会将函数命名为closure,因为这并没有告诉你它的作用。该名称应表明它正在进行AJAX调用。