JavaScript中的函数声明

时间:2013-12-18 17:23:01

标签: javascript

如果我们写

mase_me= new Function('','return \'aaa\';');
alert(mase_me.toString());

然后显示function anonymous() { 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());

然后会显示function aaa(){ return 'aaa'}

alert(aaa());

将显示aaa

3 个答案:

答案 0 :(得分:1)

每次执行new Function()时,都会将其称为匿名函数。它们是为了封闭的目的。但是,您应始终使用文字,例如[]""function(){},而不是new Function()

要调用该函数,您应该mase_me(),而不是anonymous(),因为anonymous是为此类构造的任何函数指定的名称。

答案 1 :(得分:1)

anonymous不是函数的名称。它只是一个指示,该功能没有名称,如果你愿意,可以选择一个位置。

虽然您无法通过名称调用匿名函数,但可以使用对它的引用来调用它。您在mase_me变量中有这样的引用:

alert(mase_me()) // alerts 'aaa'

调用它的唯一方法是在构建它时立即调用它,但我怀疑它会对你的情况有所帮助:

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

答案 2 :(得分:1)

anonymous是函数的名称,而不是包含对函数的引用的变量的名称 - 即mase_me

你可以看到,因为new Function('','return \'aaa\';').name === "anonymous"


当你这样做时:

function aaa() { return 'aaa'; }

有效与:

相同
var aaa = function aaa() { return 'aaa'; }

注意表示不完全相同:var functionName = function() {} vs function functionName() {}


当然,这与以这样一种方式创建的函数的作用相同:

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