【问题标题】:How to pass params to a callback如何将参数传递给回调
【发布时间】:2015-07-20 08:13:37
【问题描述】:

我正在尝试找到实现以下内容的最佳做法:
我有 3 个函数:managerhttpGetonsuccess

  1. manager 调用 httpGet 函数并传递 onsuccess 成功时调用的函数。

  2. httpGet 发出请求并调用onsuccesss

  3. onsuccess 使用来自manager 的需求参数

在不涉及httGet 的情况下,从manager 传递和参数到onsuccess 的最佳方式是什么?
我正在考虑将params 对象传递给httpGet,然后将其传递给onsuccess,但我真的不喜欢将参数传递给根本不使用它们的函数的想法。

【问题讨论】:

标签: javascript


【解决方案1】:

你的意思是这样的:

function manager()
{
   var managerParam =0;
   //the anonymous function below is in the scope of manager() so has
   //access to all of managers parameters
   httpGet(function() {
      //this function can use managerParam
      managerParam ++;
   });

  console.log(managerParam === 1); //true
}

function httpGet(onsuccess)
{
   onsuccess();
}

Fiddle

【讨论】:

    【解决方案2】:

    使用closure

    data = { cool: true };
    var yourCallbackFunction = function(httpData, notHttpData){};
    
    var bakedCallback = (function() {
        var _data = data;
        return function(httpResp) {
            yourCallbackFunction(httpResp, _data);
        }
    })();
    httpGet.onSuccess(bakedCallback);
    

    data 是您要传递给函数的额外数据。

    在您的回调中: httpData 是从请求中收到的数据。 NOThttpData 是额外的数据。

    【讨论】:

      【解决方案3】:
      1. onsuccess定义为manager中的局部函数,它可以使用它的参数和局部变量。
      2. onsuccess 传递给httpGet

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        相关资源
        最近更新 更多