Passing variables in a JavaScript callback
我很难找到一些信息,而且几乎可以肯定,因为我不知道我正在做什么的正确术语。 当我在回调函数中搜索有关变量的信息时,代码与我在此处尝试的内容不同。
我有一些JavaScript代码,这是它的一部分:
1 2 3 4 5 6 7 | var myNotification = new Notify('Notification Title', { body: 'message goes here', icon:"/icon.png", tag: 'for app use', notifyClick: functionNameHere, timeout: 10 }); |
"functionNameHere"部分是另一个函数的名称,在单击此脚本创建的通知时调用该函数。
我需要能够传递一个变量,所以基本上我需要做的是:
1 2 3 4 5 6 7 | var myNotification = new Notify('Notification Title', { body: 'message goes here', icon:"/icon.png", tag: 'for app use', notifyClick: functionNameHere('variableContentWouldbeHere'), timeout: 10 }); |
但是,当我这样做时它不能正常工作。
我怎么做到这一点?
您可以通过更改功能范围或使用闭包来实现此目的。
第一名:
1 | notifyClick: functionNameHere.bind('variableContentWouldbeHere'); |
你在"functionNameHere"实现中的上下文是你的参数。
1 2 3 | function functionNameHere() { console.log(this === 'variableContentWouldbeHere'); //true } |
第二:
使用闭包
1 | notifyClick: function() { functionNameHere('variableContentWouldbeHere'); } |
我不完全确定你要做什么,但我想你可能需要这样的东西:
1 2 3 4 5 6 7 8 9 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 }); |
1 2 3 4 5 6 7 8 9 | var myNotification = new Notify('Notification Title', { body: 'message goes here', icon:"/icon.png", tag: 'for app use', notifyClick: function(){ functionNameHere('variableContentWouldbeHere'); }, timeout: 10 }); |
你可以通过一个匿名函数来调用你的函数:
1 2 3 4 5 6 7 | 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函数成为一个包装器,返回另一个将用作回调的函数。