Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript回调中传递变量_Javascript - Fatal编程技术网

在JavaScript回调中传递变量

在JavaScript回调中传递变量,javascript,Javascript,我很难找到一些信息,这几乎可以肯定,因为我不知道我正在做什么的正确术语。当我在回调函数中搜索有关变量的信息时,代码与我在这里尝试做的不一样 我有一些JavaScript代码,这是其中的一部分: var myNotification = new Notify('Notification Title', { body: 'message goes here', icon: "/icon.png", tag: 'for app use', notifyClick: fu

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

我有一些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
});
然而,当我这样做时,它不能正常工作


我将如何实现这一点

您不能影响回调的调用方式,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使用闭包的解决方案就是我最后要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。感谢您的帮助:)我也很高兴感谢您:)您使用闭包的解决方案就是我最终要做的。然而,在你之前,有人用同样的答案回答了我,所以我接受了他们的答案。不过我确实给了你一票。谢谢你的帮助:)我也很高兴谢谢你:)