对使用Function构造函数创建的函数的内部引用

时间:2012-08-08 14:24:22

标签: javascript ecmascript-5

我正在做一些元编程,使用Function constructor从汇编的字符串创建一个函数。

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

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

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

如果我使用Function()构建该功能(不使用eval()),有没有办法实现这种效果?

3 个答案:

答案 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);
}