这是一个由两部分组成的问题,多年来一直困扰着我。

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

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

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

然而在我的例子中, CloseCallback 被定义为:
function CloseCallback(result, args)

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

2) 如何将一个值传递给 CloseCallback?我有一个 ID 想传入,以便 CloseCallback 可以使用它,但我不确定如何获取该值。

这个让我很生气,我当然可以使用帮助!

最佳答案

您可以将 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 变量,您应该通过创建如下委托(delegate)来创建上下文:
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) {
    ...
};

关于javascript - 了解语法以及如何将参数传递给没有参数列表的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25725069/

10-13 00:37