新的Function()()是什么意思?

时间:2014-07-24 22:41:04

标签: javascript function expression

我在处理项目时看到了这段代码,但我不确定它究竟做了什么。有人请教育我。感谢。

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

新的Function()()看起来像是一个立即调用的函数表达式,如果是,它会从'return'+ terms'表达式中返回值,对吗?那么为什么f在return语句中被调用为函数?

更新

  1. terms是一个只包含一个'required'元素的数组,$ element是一个HTML元素的jQuery对象
  2. 代码执行永远不会超过new Function()语句,并显示错误消息Uncaught ReferenceError:required未定义。因此在new Function()()内部调用函数required()。
  3. 之前我从未见过new Function()()语法。如果它是IIFE,不应该写成(new Function(){})()而不是

1 个答案:

答案 0 :(得分:2)

是的,你是正确的,它是一个被调用的函数 - 你可以通过这样做来自己测试:

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对象的情况下创建函数 - (function(){})()。由于new Function("[function body]")()运算符优先于new尝试运行()function(){}()成功运行会导致错误。