在 JavaScript 中分配变量名的匿名函数

Dea*_*ool 0 javascript function anonymous-function iife

有人能解释我出去,如果下面的代码片段代表匿名函数或

var alpha = (function(){ 

    /*
        private space
    */

    return{
        //Some Code Here ...

    }
})();
Run Code Online (Sandbox Code Playgroud)

这是匿名函数吗?这对我来说看起来像是匿名函数的结构,但我读到匿名函数是一个没有名字的函数。在这里,我认为 alpha(variable) 是分配给函数的名称,因此与概念相矛盾。

我知道它是否会是:

(function(){ 

    return{
        //Some Code Here ...

    }

})();
Run Code Online (Sandbox Code Playgroud)

那么这将是Anonymous Function (self invoking) 或IIFE

此外,以下是一个简单的函数,但不是匿名函数,因为 beta 被分配给该函数(如我上面的示例)。所以,如果这不是匿名函数(因为 beta 指向函数并代表它),那么我之前的函数(alpha 指向函数)怎么可能是匿名的?此外,自调用是额外的部分。我相信,仅仅因为一个函数是自调用的并不能使它成为匿名的

var beta = function(){
    //Some code 
}
Run Code Online (Sandbox Code Playgroud)

有人可以澄清我吗?

gur*_*372 5

Function有一个属性叫name规范清楚地说明

name 属性的值是一个描述函数的字符串。该名称没有语义意义,但通常是一个变量或属性名称,用于在 ECMAScript 代码中的定义点引用函数。

另外,规范

抽象操作 IsAnonymousFunctionDefinition 确定其参数是否是未绑定名称的函数定义。

下面的一些示例

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
Run Code Online (Sandbox Code Playgroud)