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语句中被作为函数调用呢
更新:
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
。