首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript中“匿名函数”和“函数文字”的区别?

JavaScript中“匿名函数”和“函数文字”的区别?
EN

Stack Overflow用户
提问于 2011-05-02 13:03:34
回答 5查看 10.8K关注 0票数 9

学习JavaScript定义匿名函数如下..。

函数是对象。因此,您可以使用构造函数并将函数分配给变量,从而创建它们--就像StringArray或其他类型一样。在下面的代码中,使用Function构造函数创建了一个新函数,函数体和参数作为参数传入: var sayHi =新函数(“toWhom”,“告警”(‘Hi’+ toWhom);"); 这种类型的函数通常被称为匿名函数,因为函数本身没有直接声明或命名。

这是JavaScript中“匿名函数”的正确定义吗?如果不是,什么是匿名函数,匿名函数和函数文字之间有什么区别?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-02 13:07:05

函数表达式和函数声明

由于您对函数感兴趣,以下是一些需要了解的重要内容。

var abc = function() { ... }被称为函数表达式。变量将在执行时被分配给匿名函数,尽管它的变量声明将被悬挂到当前执行上下文(作用域)的顶部。

但是,函数表达式也可以指定名称,因此可以在其体内调用它,使其具有递归性。请记住这一点,IE有一些问题。当您给它分配一个名称时,它绝对不是一个匿名函数。

function abc() { ... }这样的函数称为函数声明。它的定义被提升到其范围的顶端。它的名称可以在它和它的父范围内使用。

进一步阅读

你的例子

它是一个匿名函数,但分配给变量sayHi

正如Šime Vidas提到的,使用new运算符实例化一个新的Function对象,参数和函数体作为字符串传入。结果对象被赋值给sayHi

使用此方法创建函数的实际使用很少(尽管它可能只是为了帮助显示函数是对象)。我还相信,将其参数列表和函数体作为字符串传递将调用eval()类型函数,当有更好的构造可用时,这很少是好的。

另外,使用Function 不要形成封闭创建的函数。

如果出于某种原因,我需要创建一个Function,并且它的参数和/或主体只能作为字符串使用,我才会使用这个方法。

在现实世界里,你会.

代码语言:javascript
复制
var sayHi = function(toWhom) {
   alert('Hi' + toWhom);
};

还请参考费利克斯Šime的评论,以获得良好的讨论和进一步的澄清。

票数 18
EN

Stack Overflow用户

发布于 2011-05-02 13:07:34

我认为匿名函数的更广泛和更被接受的定义是一个没有名称的函数。

票数 1
EN

Stack Overflow用户

发布于 2011-05-02 13:13:29

匿名函数只是一个没有名称的函数。

代码语言:javascript
复制
function(a, b){
  return a + b;
}

上面的代码将是无用的,因为它没有您可以调用它的名称。因此,它们通常被分配给一个变量。

代码语言:javascript
复制
var func = function(a, b){
  return a + b;
}

这很有帮助,因为您可以将一个匿名函数传递给另一个函数或方法,而不必在手动之前创建该函数,如下所示。

代码语言:javascript
复制
function bob(a){
  alert(a());
}

bob(function(){
  return 10*10;
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5857459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档