gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:09:34 25 4
gpt4 key购买 nike

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

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

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

更新:

  1. terms 是一个仅包含一个“必需”元素的数组,$element 是 HTML 元素的 jQuery 对象
  2. 代码执行永远不会通过 new Function() 语句,并出现错误消息 Uncaught ReferenceError: required is not Defined。因此,在 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 对象创建函数 - (function(){})() 。而new Function("[function body]")()由于 new 将成功运行运算符优先级高于 ()尝试运行function(){}()会产生错误。

关于javascript - new Function()() 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com