在JavaScript回调中传递变量

时间:2016-10-20 09:28:07

标签: javascript

我很难找到一些信息,而且几乎可以肯定,因为我不知道我正在做什么的正确术语。当我在回调函数中搜索有关变量的信息时,代码与我在此处尝试的代码不同。

我有一些JavaScript代码,这是其中的一部分:

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
});

然而,当我这样做时,它无法正常工作。

我将如何实现这一目标?

5 个答案:

答案 0 :(得分:2)

您可以通过更改功能范围或使用闭包来实现此目的。

第一

notifyClick: functionNameHere.bind('variableContentWouldbeHere');

你的上下文" functionNameHere"实施是你的论点。

function functionNameHere() {
   console.log(this === 'variableContentWouldbeHere'); //true
}

第二

使用闭包

notifyClick: function() { functionNameHere('variableContentWouldbeHere'); }

答案 1 :(得分:1)

var myNotification = new Notify('Notification Title', {
    body: 'message goes here',
    icon: "/icon.png",
    tag: 'for app use',
    notifyClick: function(){
    functionNameHere('variableContentWouldbeHere');    
    },
    timeout: 10
});

答案 2 :(得分:1)

我不完全确定你要做什么,但我想你可能需要这样的东西:

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
});

答案 3 :(得分:0)

您无法影响调用回调的方式,Notify类中的代码会确定这一点。如果您尝试像第二个示例中那样传递它,则函数" functionNameHere"将立即调用它的结果并将其结果作为回调函数传递给Notify构造函数 - 这不是你想要的。

你可以做的是让你的functionNameHere函数成为一个包装器,返回另一个将用作回调的函数。

答案 4 :(得分:0)

你可以传递一个匿名函数来调用你的函数:

var myNotification = new Notify('Notification Title', {
    body: 'message goes here',
    icon: "/icon.png",
    tag: 'for app use',
    notifyClick: () => functionNameHere('variableContentWouldbeHere'),
    timeout: 10
});