Javascript 新函数()是什么意思?

Javascript 新函数()是什么意思?,javascript,function,expression,Javascript,Function,Expression,我在一个项目中看到了这段代码,不确定它到底做了什么。请有人教育我。谢谢 var f = new Function('return '+terms)($element); return f($element); 新函数()在我看来像是一个立即调用的函数表达式,如果是,它将从“return”+terms”表达式返回值,对吗?那么为什么f在return语句中被作为函数调用呢 更新: terms是只包含一个元素“required”的数组,$element是HTML元素的jQuery对象 代码执行永远不

我在一个项目中看到了这段代码,不确定它到底做了什么。请有人教育我。谢谢

var f = new Function('return '+terms)($element);
return f($element);
新函数()在我看来像是一个立即调用的函数表达式,如果是,它将从“return”+terms”表达式返回值,对吗?那么为什么f在return语句中被作为函数调用呢

更新:

  • terms是只包含一个元素“required”的数组,$element是HTML元素的jQuery对象
  • 代码执行永远不会通过带有错误消息Uncaught ReferenceError:required的new Function()语句。因此在
    newfunction()()
    中调用了required()函数
  • 我以前从未见过
    newfunction()()
    语法。如果它是一个IIFE,那么它不应该写为
    (new Function(){})(

  • 是的,您认为它是一个被调用的函数是正确的-您可以通过执行以下操作自己测试它:

    var f = new Function("return 'a'")('b'); 
    console.log(f);
    
    'a'

    只有当
    terms
    是表示函数的字符串时,您发布的代码才能工作,这意味着:

    var f = new Function("return new Function('return arguments')")();
    console.log(f, f(5));
    
    function anonymous(){return arguments}[5]

    不用说,这是一种相当奇特的JS写作方式

    关于更新:

    实际上,如果terms=
    ['required']
    是由
    'return'+terms
    转换成字符串,那么您就有了
    新函数(“return'required')
    。由于这是一个返回
    'required'
    的函数,因此尝试将其作为函数调用-
    required($elem)
    会给您带来引用错误<代码>新功能(“需要返回”)。由于这是一个返回
    所需的
    (未定义)的函数,因此它将给您提供确实的引用错误


    不,那是一种可以接受的写作方式。更常见的是
    (新函数(“[函数体]”)()
    ,如果创建的函数没有使用函数对象-
    (函数(){})(
    )。而
    new函数(“[Function body]”)将成功运行(
    ),因为
    new
    运算符优先级高于
    ),尝试运行
    Function(){}()
    将产生错误。

    ?这意味着编写它的人都是一个糟糕的程序员。
    新函数
    类似于
    eval
    。它返回一个函数,运行时将
    eval
    传递给它的字符串。显然,它返回另一个函数,然后调用它。你可以在这里找到一个解释:@RocketHazmat-我认为它们是变量。嘻嘻嘻嘻!这是我见过的最糟糕的编码实践……实际上,
    'return'+术语
    最终将成为
    'return required'
    。因此,
    eval
    失败,因为它找不到所需的变量
    required