javascript - JavaScript 中 "anonymous function"和 "function literal"的区别?

标签 javascript terminology

本书Learning JavaScript定义匿名函数如下...

Functions are objects. As such, you can create them - just like a String or Array or other type - by using a constructor and assigning the function to a variable. In the following code, a new function is created using the Function constructor, with the function body and argument passed in as arguments:

var sayHi = new Function("toWhom", "alert('Hi' + toWhom);");

This type of function is often referred to as an anonymous function because the function itself isn't directly declared or named.

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

最佳答案

函数表达式和函数声明

既然您对函数感兴趣,这里有一些重要的知识需要了解。

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

然而,一个函数表达式也可以被赋予一个名字,这样它就可以在它的主体中被调用以使其递归。牢记IE has some issues有了这个。当您为其指定名称时,它绝对不是匿名函数。

function abc() { ... } 之类的函数称为函数声明。它的定义被提升到其范围的顶部。它的名称在它及其父级范围内可用。

Further Reading .


你的例子

它是一个匿名函数,但是赋给了变量sayHi

作为Šime Vidas提到,一个新的Function对象是用new运算符实例化的,参数和函数体作为字符串传入。生成的对象被分配给 sayHi

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

此外,使用 Function 创建的函数 do not form a closure .

只有在出于某种原因我需要创建一个Function 时,我才会使用此方法,其参数和/或主体仅作为字符串对我可用。

在现实世界中,你会...

var sayHi = function(toWhom) {
   alert('Hi' + toWhom);
};

另请参阅 Felix 的评论和 Šime进行良好的讨论和进一步的澄清。

关于javascript - JavaScript 中 "anonymous function"和 "function literal"的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857459/

相关文章:

javascript - 在执行配置之前等待异步调用运行(Angular JS)

terminology - 内核或核心 - 何时使用它们?

computer-science - 什么是有限状态传感器?

javascript - jQuery 使用关键字搜索和过滤

javascript - 识别 Canvas 元素,分离矩阵中的元素

html - 指代不接受任何值的属性(即 "checked"和 "selected")的术语是什么?

c++ - 用C和C++调用的(…)是什么?

language-agnostic - 什么是ADT? (抽象数据类型)

javascript - 当对象在 Javascript 中设置为 null 时,事件监听器是否会被删除?

javascript - 如何使用 JQuery UI 在模态对话框中显示 javascript 图形?