2

我正在做一些元编程,使用Function构造函数从组装的字符串中创建一个函数。

构造Function函数允许指定参数名称和主体,但似乎没有任何方法可以指定函数的名称。

这意味着似乎没有办法以符合标准的方式从自身内部引用函数(arguments.callee在 ES5 中已弃用,在严格模式下被禁止)。如果我正在编写一个文字函数语句,我可以这样做:

function myFunc(a, b, c) {
   if (c) {
      return myFunc(a, b);
   }
   return 0;
}

如果我使用Function()(不使用eval())构建该功能,有什么方法可以实现这种效果?

4

3 回答 3

1

如果你目前正在做这样的事情:

var f = new Function( argName, stringContainingCode );

那么你可以改为:

var f = new Function( "return function " + functionName + "(" + argName + ") { " + stringContainingCode + "}")();

换句话说,在一个包装器内构建函数,该包装器使用给定的名称返回它。

于 2012-08-08T14:28:50.873 回答
0

使变量等于您的新功能

var myFunc = new Function( x, "return 2 * x ") ;

然后,您可以像往常一样使用引用该功能

myFunc(7) ; // returns, like, 9 or something
于 2012-08-08T14:29:18.407 回答
0

内部命名函数怎么样?

function myFunc(a, b, c) {
    return (function _myFunc(a, b, c) {
        if (c) {
            return _myFunc(a, b);
        }
        return 0;
    })(a, b, c);
}
于 2012-08-08T14:29:27.047 回答