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)
有人可以澄清我吗?
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 objectRun Code Online (Sandbox Code Playgroud)