如果我们写
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
。
答案 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