理解语法以及如何将参数传递给没有参数列表的函数

时间:2014-09-08 13:09:42

标签: javascript

这是一个由两部分组成的问题,一直困扰着我好几天。

1)有人可以解释以下示例的工作原理吗?

我在SharePoint中打开表单并在名为CloseCallback的函数中捕获用户的响应。我发现的例子没有表明通过任何参数传递。

options.dialogReturnValueCallback = Function.createDelegate(null, CloseCallback);

然而在我的例子中,CloseCallback被定义为:

function CloseCallback(result, args)

这是如何工作的?如何调用该函数而不将任何内容传递给它?

2)如何将值传递给CloseCallback?我有一个我想传入的ID,所以CloseCallback可以使用它,但我不知道如何获得该值。

这个让我很伤心,我肯定可以使用这个帮助!

2 个答案:

答案 0 :(得分:5)

您可以将CloseCallback定义为

var CloseCallback = function (result, args) {

};

然后当你这样做:

options.dialogReturnValueCallback = Function.createDelegate(null, CloseCallback);

您只为createDelegate方法提供了对该功能的引用,您实际上并未对其进行调用。

何时:

var a = function () {};

然后

var b = a; // assigns b the value of a, b will refer to the same function. 

var c = a(); // c will contain the return value of a

1

所以当你执行createDelegate(null, CloseCallback)时,你只传递对你的函数的引用(你做了b = a的类型)

createDeleagte最终会将您的回调称为:

Function.createDelegate = function (someParam, callback) {
      /*Do some stuff - maybe async etc.*/
      callback.apply(thisArg, args); // here your callback will be called with the appropriate this context, result and the appropriate argument list (result, args)
      /*Do some more stuff*/
}

2

如果您希望有权访问本地id变量,则应通过创建代理来创建上下文,如:

options.dialogReturnValueCallback = 
    Function.createDelegate(null, function (result, args){
        CloseCallback(id, result, args); // you pass the id reference from the createDelegate (or parent) contexts into CloseCallback
    });

在这种情况下,您还应将CloseCallback的签名修改为:

var CloseCallback = function (id, result, args) {
    ...
};

答案 1 :(得分:1)

  

这是如何工作的?如何调用该函数而不将任何内容传递给它?

根据您的问题,它看起来不像调用该函数;您完成时利用的API将会完成。如果它实际上没有传递任何参数(例如,他们称之为dialogReturnValueCallback()),那么undefined将被分配给您的每个参数。

  

如何将值传递给CloseCallback?我有一个我想传入的ID,所以CloseCallback可以使用它,但我不知道如何获得该值。

这开始混淆了工作流程。听起来好像你可以控制回调的执行时间和方式。如果是这种情况,那么当您从options对象执行回调时,只需从DOM中注入适当的值(例如options.dialogReturnValueCallback(someValue))。