new Function()()是什么意思?

what does new Function()() mean?

本文关键字:意思 是什么 new Function      更新时间:2023-09-26

我在一个项目上工作时看到了这段代码,我不确定它到底是做什么的。请有人来教育我吧。谢谢。

var f = new Function('return '+terms)($element);
return f($element);

新的Function()()对我来说就像一个立即调用的函数表达式,如果它是它会从"返回"+术语"表达式返回值,正确吗?那么为什么f在返回语句中作为函数调用呢?

更新:

  1. terms是一个只包含一个元素'required'的数组,$element是一个HTML元素的jQuery对象
  2. 代码执行永远不会超过new Function()语句,错误消息Uncaught ReferenceError: required没有定义。因此在new Function()()中调用了required()函数。
  3. 我以前从未见过new Function()()语法。如果是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转换成字符串,所以你有 new Function("return 'required'")。因为这是一个返回'required'的函数,试图将其作为函数调用- required($elem)将给您提供真正的引用错误。 new Function("return required")。因为这是一个返回required的函数,它没有定义,它会给你真正的引用错误。

不,这是可以接受的写法。更常见的是(new Function("[function body]"))()和在没有使用函数对象的情况下创建的函数- (function(){})()。虽然new Function("[function body]")()将成功运行,由于new运算符优先于(),试图运行function(){}()将产生错误。