在JavaScript

时间:2017-11-28 08:07:01

标签: javascript function anonymous-function iife

如果下面的代码段代表匿名函数或不是,有人可以澄清一下吗?

var alpha = (function(){ 

    /*
        private space
    */

    return{
        //Some Code Here ...

    }
})();

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

我知道是否会:

(function(){ 

    return{
        //Some Code Here ...

    }

})();

然后这将是匿名函数(自我调用)或 IIFE

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

var beta = function(){
    //Some code 
}

有人可以澄清我吗?

4 个答案:

答案 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()

相关问题