我在处理项目时看到了这段代码,但我不确定它究竟做了什么。有人请教育我。感谢。
var f = new Function('return '+terms)($element);
return f($element);
新的Function()()看起来像是一个立即调用的函数表达式,如果是,它会从'return'+ terms'表达式中返回值,对吗?那么为什么f在return语句中被调用为函数?
更新
new Function()
语句,并显示错误消息Uncaught ReferenceError:required未定义。因此在new Function()()
内部调用函数required()。new Function()()
语法。如果它是IIFE,不应该写成(new Function(){})()
而不是答案 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(){}()
成功运行会导致错误。