这是一个由两部分组成的问题,多年来一直困扰着我。
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/