在JavaScript回调中传递变量

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函数成为一个包装器,返回另一个将用作回调的函数。