本书Learning JavaScript定义匿名函数如下...
Functions are objects. As such, you can create them - just like a
String
orArray
or other type - by using a constructor and assigning the function to a variable. In the following code, a new function is created using theFunction
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() { ... }
之类的函数称为函数声明。它的定义被提升到其范围的顶部。它的名称在它及其父级范围内可用。
你的例子
它是一个匿名函数,但是赋给了变量sayHi
。
作为Šime Vidas提到,一个新的Function
对象是用new
运算符实例化的,参数和函数体作为字符串传入。生成的对象被分配给 sayHi
。
在现实世界中使用此方法创建函数的情况很少见(尽管它可能只是为了帮助表明函数是对象)。我还相信将其参数列表和函数体作为字符串传递将调用 eval()
类型的函数,当有更好的构造可用时,这很少是好的。
此外,使用 Function
创建的函数 do not form a closure .
只有在出于某种原因我需要创建一个Function
时,我才会使用此方法,其参数和/或主体仅作为字符串对我可用。
在现实世界中,你会...
var sayHi = function(toWhom) {
alert('Hi' + toWhom);
};
关于javascript - JavaScript 中 "anonymous function"和 "function literal"的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857459/