JavaScript 中的函数声明
Function declaration in 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
。
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'';'))());
相关文章:
- Eval未声明函数
- JavaScript + mocha:可能是在 for 循环中声明函数的闭包问题
- 使用 .on 函数运行 jQuery 声明函数
- 返回并重新声明函数中的变量
- SyntaxError:严格模式不允许在词法嵌套语句中声明函数
- JavaScript函数的类型是在声明函数之前定义的
- 在 initComponent Ext JS4 中声明函数
- 在对象中声明函数名称,为什么
- 在变量中声明函数的不同方法
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 在 angularjs 控制器范围内声明函数和属性,但不附加到$scope
- 在声明函数中使用“this”时严格违规,函数表达式不违规
- 只有从html set onclick事件调用代码声明函数时,该函数才不存在
- 在jQuery中动态声明函数
- 声明函数并在jquery事件绑定上调用它
- 在Javascript中声明函数的最有效方法是什么
- javascript声明函数超时
- Javascript:动态声明函数的正确方法
- 为闭包声明函数两次
- 习语Javascript编码风格-何时在原型上声明函数,何时在函数构造函数内声明函数