JavaScript 中的函数声明

Function declaration in JavaScript

本文关键字:声明 函数 JavaScript      更新时间:2023-09-26

如果我们写

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

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

任何时候你做一个new Function(),它被称为匿名函数。它们是为了关闭。但是,您应该始终使用文字,例如[]""function(){},而不是new Function()

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

anonymous不是

函数的名称。它只是一个指示符,表明该函数没有名称,如果您愿意,可以提供一个placehoder。

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

alert(mase_me()) // alerts 'aaa'
调用它

的唯一另一种方法是在构造时立即调用它,但我怀疑它对您的情况是否有帮助:

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