繁体   English   中英

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

[英]Anonymous Function with variable name assigned in JavaScript

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

var alpha = (function(){ 

    /*
        private space
    */

    return{
        //Some Code Here ...

    }
})();

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

我知道是否会是:

(function(){ 

    return{
        //Some Code Here ...

    }

})();

那么这将是Anonymous Function (自我调用)或IIFE

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

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

有人可以澄清我吗?

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 

最上面的代码段包含一个匿名函数,该函数立即被调用。 函数调用的结果( Some Code here包含Some Code here的对象)分配给alpha ,而不是函数本身。

beta函数也是匿名的(没有名称),但已分配给beta ..您也可以将其分配给gamma (如gamma = beta ),但该函数仍将是匿名的-这些只是对其的引用,而不是它的名字。

也许这会使它更清晰-您可以说

var bubu = function mimi() {
}

此函数不是匿名函数,其名称为mimi ,并且已分配给名为bubu的变量。 但是bubu仍然不是函数的名称,它仍然是mimi

您的示例中的所有函数都是匿名的。 您可以将匿名函数分配给变量,但是函数本身仍将是匿名的。 您可以在Wikibook上阅读一些解释。

在示例1中,变量成为对IIFE 返回值的引用,而在示例3中,其成为对函数本身的引用。

您不能调用alpha() (除非IIFE当然返回一个新函数),但是您可以调用beta()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM