HLJ 发布于
2025-06-11 10:08:25
0阅读

JavaScript 的 new Function 语法

JavaScript 的 new Function 语法

new Function 是 JavaScript 中一种创建函数对象的特殊方式,它允许通过字符串动态创建函数。

基本语法

let func = new Function ([arg1[, arg2[, ...argN]], functionBody);
  • arg1, arg2, ... argN:函数参数(可选)
  • functionBody:包含函数体的字符串

示例

// 创建无参数函数
let sayHi = new Function('console.log("Hello")');
sayHi(); // 输出: Hello

// 创建带参数的函数
let sum = new Function('a', 'b', 'return a + b');
console.log(sum(2, 3)); // 输出: 5

// 创建多参数函数
let multiply = new Function('x', 'y', 'z', 'return x * y * z');
console.log(multiply(2, 3, 4)); // 输出: 24

特点

  1. 词法环境:使用 new Function 创建的函数,其 [[Environment]] 引用全局词法环境,而不是创建时的局部环境。因此它不能访问外部变量,只能访问全局变量。

    let value = "test";
    
    function getFunc() {
      let value = "hello";
      
      let func = new Function('console.log(value)');
      return func;
    }
    
    getFunc()(); // 输出: test(全局变量),而不是 "hello"
    
  2. 动态执行:可以动态地从服务器接收代码并执行。

  3. 安全性:在生产环境中应谨慎使用,因为可能带来安全风险(如代码注入)。

eval 的区别

  • eval 可以访问局部变量,而 new Function 不能
  • new Function 创建的函数有明确的作用域隔离

使用场景

  • 需要从服务器动态获取代码并执行
  • 模板引擎实现
  • 数学表达式计算器等需要动态解析用户输入的场合

注意事项

由于安全考虑,应避免使用不受信任的字符串来创建函数,这可能导致 XSS 攻击等安全问题。

当前文章内容为原创转载请注明出处:http://www.good1230.com/detail/2025-06-11/808.html
最后生成于 2025-06-13 20:53:07
此内容有帮助 ?
0