JavaScript中的函数声明

JavaScript中的函数声明,javascript,Javascript,如果我们写 mase_me= new Function('','return \'aaa\';'); alert(mase_me.toString()); 然后显示函数匿名(){return'aaa';}。此外,我试图调用函数,我正在编写 alert(anonymous()); 但我有一个错误 [18:23:40.220] ReferenceError: anonymous is not defined @ http://fiddle.jshell.net/_display/:33 我被排

如果我们写

mase_me= new Function('','return \'aaa\';');
alert(mase_me.toString());
然后显示
函数匿名(){return'aaa';}
。此外,我试图调用函数,我正在编写

alert(anonymous());
但我有一个错误

[18:23:40.220] ReferenceError: anonymous is not defined @ http://fiddle.jshell.net/_display/:33
我被排除在外,
alert(anonymous())将显示
aaa
,因为如果我写

made_me=function aaa() { return 'aaa'; }
alert(made_me.toString());
然后将显示
函数aaa(){return'aaa'}

alert(aaa());

每当您执行
新函数()
,它都将显示
aaa

,称为匿名函数。它们用于关闭。但是,您应该始终使用文本,例如
[]
”和
函数(){}
,而不是
新函数()


要调用函数,您应该执行
mase__me()
,而不是
anonymous()
,因为
anonymous
是这样构造的任何函数的名称。

anonymous
不是函数的名称。它只是一个指示函数没有名称的指示器,如果您愿意,它是一个placehoder

虽然不能按名称调用匿名函数,但可以使用对它的引用来调用它。在
mase\u me
变量中有这样一个引用:

alert(mase_me()) // alerts 'aaa'
调用它的唯一其他方法是在它构建时立即调用它,但我怀疑它对您的情况是否有帮助:

alert((new Function('','return \'aaa\';'))());

anonymous
是函数名,而不是包含函数引用的变量名,即
mase\u me

您可以看到这一点,因为
新函数(“”,'return'aaa\';')。name==“anonymous”


当您这样做时:

function aaa() { return 'aaa'; }
它实际上等同于:

var aaa = function aaa() { return 'aaa'; }
注意,这不完全相同:)


当然,这与以指定明确名称的方式创建的函数相同:

var a = new Function("b", "return 'aaa';");
a(); // works
b(); // doens't work (not defined)
a.name === "b" // true

匿名的意思是“未命名”。。。Javascript告诉您函数没有名称。因此,您不能只使用
anonymous
,就好像它是有趣的函数名一样,它必须是Moz独有的东西。在Chrome中,
newfunction().name
(Function(){}.name
都是空字符串。在Moz中,
newfunction().name
是“匿名的”,但
(Function(){})。name
是一个空字符串。奇怪。事实上,我自己也很惊讶,Firefox中的
new Function()
的名称等于
“匿名”
,我希望它是一个空字符串,就像
(Function(){})。name
!在我看来,Chrome中的行为更为明智。