[英]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.