簡體   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