我正在做一些元编程,使用Function
constructor从汇编的字符串创建一个函数。
Function
构造函数允许指定参数名称和正文,但似乎没有任何方法可以指定函数的名称。
这意味着似乎没有办法以符合标准的方式从内部引用函数(arguments.callee
在ES5中已被弃用,在严格模式下被禁止)。如果我正在写一个文字函数语句,我可以这样做:
function myFunc(a, b, c) {
if (c) {
return myFunc(a, b);
}
return 0;
}
如果我使用Function()
构建该功能(不使用eval()
),有没有办法实现这种效果?
答案 0 :(得分:1)
如果你现在正在做这样的事情:
var f = new Function( argName, stringContainingCode );
然后你可以改为:
var f = new Function( "return function " + functionName + "(" + argName + ") { " + stringContainingCode + "}")();
换句话说,在包装器中构建函数,并以给定的名称返回它。
答案 1 :(得分:0)
使变量等于新函数
var myFunc = new Function( x, "return 2 * x ") ;
然后您可以像往常一样使用参考功能
myFunc(7) ; // returns, like, 9 or something
答案 2 :(得分:0)
内部命名函数怎么样?
function myFunc(a, b, c) {
return (function _myFunc(a, b, c) {
if (c) {
return _myFunc(a, b);
}
return 0;
})(a, b, c);
}