【问题标题】:Using both anonymous functions and functions stored in variables as callback arguments JavaScript使用匿名函数和存储在变量中的函数作为回调参数 JavaScript
【发布时间】:2014-08-13 23:44:33
【问题描述】:

我不完全清楚这应该是什么意思。我想我的问题是是否有人可以为我解决这个问题。到目前为止我从回调中了解到的:

function Hello(Callback,a,b){
Callback(a,b);
}

function Hi(a,b){
alert("Hi " + a + b);
}

Hello(Hi,5,6);

【问题讨论】:

  • 提示:除构造函数外,所有名称均使用小写。
  • 你在哪里找到这个声明?你知道什么是“匿名函数”吗?
  • @Bergi 如果我没记错的话,匿名函数就是没有名字的函数。
  • 你在代码中遇到过吗?你怎么能在这里使用它?在您找到此声明的地方是否有这样的示例(请链接它!)?

标签: javascript callback


【解决方案1】:

在 JavaScript 中,函数是对象,就像字符串和数字一样,由于该特性,您可以将函数作为变量传递给其他函数。

function Hello(Callback,a,b){
Callback(a,b);
}

function Hi(a,b){
alert("Hi " + a + b);
}

Hello(Hi,5,6);

在你的 sn-p 中,你声明了一个名为 Hello 的函数,它接受三个参数。然后,Hello 函数将“将回调作为函数调用”,实际执行给定最后一行代码传入的 Hi 函数。

你必须小心使用类似的函数,尤其是“this”。由于“this”指的是自包含对象,“this”实际上将指代某些上下文中的函数。

但是,这不是匿名函数。您的示例的修改版本:

function Hello(Callback, a, b){
   Callback(a,b);
}
Hello(function(a,b){
  alert("Hi " + a + b);
}, 5, 6);

get 传入的那个函数是匿名的,它没有命名(JavaScript 引擎会给它一个唯一的名称,但它看起来并不漂亮)。

【讨论】:

  • this 几乎不会引用函数本身,不会。
  • "既然函数是对象,你可以直接声明它们" - 嗯,什么?
  • 我猜所有函数都是按字面意思声明的......除非你有一些奇怪的东西,比如“new Function()”,我认为你实际上可以做到......
  • 从技术上讲,只有函数声明是声明的,你的意思是函数表达式可以代替代码中的每个任意表达式。我从来没有听说过/使用过“函数文字”这个词,尽管它seeems to exist
猜你喜欢
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多