在JavaScript回调中传递变量
我很难找到一些信息,这几乎可以肯定,因为我不知道我正在做什么的正确术语。当我在回调函数中搜索有关变量的信息时,代码与我在这里尝试做的不一样 我有一些JavaScript代码,这是其中的一部分:在JavaScript回调中传递变量,javascript,Javascript,我很难找到一些信息,这几乎可以肯定,因为我不知道我正在做什么的正确术语。当我在回调函数中搜索有关变量的信息时,代码与我在这里尝试做的不一样 我有一些JavaScript代码,这是其中的一部分: var myNotification = new Notify('Notification Title', { body: 'message goes here', icon: "/icon.png", tag: 'for app use', notifyClick: fu
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: functionNameHere,
timeout: 10
});
“functionNameHere”部分是另一个函数的名称,单击此脚本创建的通知时调用该函数
我需要能够同时传递一个变量,所以基本上我需要做的是:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: functionNameHere('variableContentWouldbeHere'),
timeout: 10
});
然而,当我这样做时,它不能正常工作
我将如何实现这一点 您不能影响回调的调用方式,Notify类中的代码决定了这一点。如果您尝试像在第二个示例中那样传递它,函数“functionNameHere”将立即被调用,其结果将作为回调函数传递给Notify构造函数,这不是您想要的
您可以做的是将functionNameHere函数设置为一个包装器,返回另一个将用作回调的函数。您不能影响回调的调用方式,Notify类中的代码决定了这一点。如果您尝试像在第二个示例中那样传递它,函数“functionNameHere”将立即被调用,其结果将作为回调函数传递给Notify构造函数,这不是您想要的
您可以做的是将functionNameHere函数作为一个包装器,返回另一个将用作回调的函数。您可以通过更改函数范围或使用闭包来实现这一点 第一: “functionNameHere”实现中的上下文是您的参数
function functionNameHere() {
console.log(this === 'variableContentWouldbeHere'); //true
}
第二:
使用闭包
notifyClick: function() { functionNameHere('variableContentWouldbeHere'); }
您可以通过更改函数范围或使用闭包来实现这一点 第一: “functionNameHere”实现中的上下文是您的参数
function functionNameHere() {
console.log(this === 'variableContentWouldbeHere'); //true
}
第二:
使用闭包
notifyClick: function() { functionNameHere('variableContentWouldbeHere'); }
您可以传递一个匿名函数,该函数调用您的函数,如下所示:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: () => functionNameHere('variableContentWouldbeHere'),
timeout: 10
});
var myVariable = {};
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: function(e){
functionNameHere(myVariable);
},
timeout: 10
});
您可以传递一个匿名函数,该函数调用您的函数,如下所示:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: () => functionNameHere('variableContentWouldbeHere'),
timeout: 10
});
var myVariable = {};
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: function(e){
functionNameHere(myVariable);
},
timeout: 10
});
我不完全确定你想做什么,但我想你可能需要这样的东西:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: () => functionNameHere('variableContentWouldbeHere'),
timeout: 10
});
var myVariable = {};
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: function(e){
functionNameHere(myVariable);
},
timeout: 10
});
我不完全确定你想做什么,但我想你可能需要这样的东西:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: () => functionNameHere('variableContentWouldbeHere'),
timeout: 10
});
var myVariable = {};
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: function(e){
functionNameHere(myVariable);
},
timeout: 10
});
notifyClick:functionNameHere.bind(someContext,yourVar)
Research'currying--基本上使用Maxx注释的一些变体notifyClick:functionNameHere.bind(someContext,yourVar)
Research'currying--基本上使用Maxx注释的一些变体因此,基本上,除非Notify类允许传递变量,它不起作用?只需使用bind
,您就可以将上下文和参数绑定到函数。因此,基本上,除非Notify类允许传递变量,否则它不会起作用?只需使用bind
,您就可以将上下文和参数绑定到函数,这比我的答案更好;-)我最后使用了闭包,这是你的第二种方法。因为你是第一个用这个答案回答的人,所以我接受你的答案。比我的答案更好;-)我最后使用了闭包,这是你的第二种方法。因为你是第一个回答这个问题的人,所以我接受你的答案。你使用闭包的解决方案就是我最后要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。谢谢你的帮助:)谢谢@SherwinFlightYour使用闭包的解决方案就是我最后要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。谢谢你的帮助:)谢谢@SherwinFlightYour使用闭包的解决方案就是我最后要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。感谢您的帮助:)我也很高兴感谢您:)您使用闭包的解决方案就是我最终要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。谢谢你的帮助:)我也很高兴谢谢你:)