如果下面的代码段代表匿名函数或不是,有人可以澄清一下吗?
var alpha = (function(){
/*
private space
*/
return{
//Some Code Here ...
}
})();
这是一个匿名函数吗?这看起来像我的匿名函数的结构,但我读到匿名函数是没有名称的函数。在这里,我认为alpha(变量)是分配给函数的名称,因此与概念相矛盾。
我知道是否会:
(function(){
return{
//Some Code Here ...
}
})();
然后这将是匿名函数(自我调用)或 IIFE 。
此外,以下是一个简单的函数,但不匿名,因为beta被分配给函数(就像我上面的例子)。所以,如果这不是匿名函数(因为beta指向函数&代表它),那么我之前的函数(指向函数的alpha)如何可以是匿名的?此外,自我调用是额外的一部分。仅仅因为一个函数是自我调用不会使它匿名我相信。
var beta = function(){
//Some code
}
有人可以澄清我吗?
答案 0 :(得分:4)
Function
有一个名为name
的属性,spec明确表示
name属性的值是一个描述的字符串 功能。该名称没有语义意义,但通常为a 变量或属性名称,用于引用函数 ECMAScript代码中的定义点。
此外,spec说
抽象操作IsAnonymousFunctionDefinition确定它是否 argument是一个不绑定名称的函数定义。
以下一些样本
var alpha = function(){};
console.log(alpha.name); //returns alpha
alpha = function abc(){};
console.log(alpha.name); //returns abc
alpha = { a : function(){} };
console.log(alpha.a.name); //returns a overrides alpha
alpha = (function(){
return function(){}
})();
console.log(alpha.name); //return "" since inner function doesn't have a name
alpha = (function(){
return (a = function(){})
})();
console.log(alpha.name); //return a since inner function is assigned to property a
alpha = (function(){
return function a (){}
})();
console.log(alpha.name); //return a
alpha = (function(){
return{
}
})();
console.log(alpha.name); //undefined since return value is an object

答案 1 :(得分:2)
顶部代码段包含一个匿名函数,可以立即调用。函数调用的结果(包括Some Code here
的对象)被分配给alpha
,因此不是函数本身。
beta函数也是匿名的(它没有名称),但它已分配给beta
..您也可以将其分配给gamma
(如gamma = beta
中所示),但该函数仍然是匿名的 - 这些只是对它的引用,而不是它的名称。
也许这会让它更清晰 - 你可以说
var bubu = function mimi() {
}
此函数不是匿名函数,其名称为mimi
,并且它被分配给名为bubu
的变量。但是bubu
仍然不是函数的名称,它仍然是mimi
。
答案 2 :(得分:1)
您示例中的所有功能都是匿名的。您可以将一个匿名函数分配给变量,但函数本身仍然是匿名的。 您可以在wikibooks上阅读一些解释。
答案 3 :(得分:1)
在示例1中,变量成为对IIFE的返回值的引用,而在示例3中,它变为对函数本身的引用。
您无法拨打alpha()
(当然,除非IIFE返回新功能),但您可以拨打beta()
。