0

0

JavaScript中newFunction构造函数的动态创建方式

舞夢輝影

舞夢輝影

发布时间:2026-03-16 21:41:27

|

593人浏览过

|

来源于php中文网

原创

JavaScript中没有newFunction构造函数,实际是Function构造函数支持运行时以字符串动态创建函数,其参数和函数体均为字符串,生成的函数在全局作用域执行且无闭包。

javascript中newfunction构造函数的动态创建方式

JavaScript 中没有 newFunction 这个内置构造函数,你可能指的是通过 Function 构造函数动态创建函数的方式——这是 JavaScript 唯一原生支持的、在运行时以字符串形式生成并执行函数的方法。

Function 构造函数的基本用法

Function 是一个内建构造函数,允许你传入参数名和函数体字符串,动态生成新函数。它与 eval 或函数表达式不同,生成的函数在全局作用域中创建(不捕获外层词法环境)。

  • 语法: new Function([arg1, arg2, ...,] functionBody)
  • 参数名必须是字符串,函数体也必须是字符串
  • 所有参数(包括最后一个)都是字符串类型,最后一个为函数体

例如:

const add = new Function('a', 'b', 'return a + b');
console.log(add(2, 3)); // 5

与普通函数声明/表达式的本质区别

动态创建的函数无法访问定义时的外部变量(即没有闭包),它的作用域链只包含全局对象和自身局部变量。

立即学习Java免费学习笔记(深入)”;

  • ❌ 不会捕获外层 let/const 变量或函数参数
  • ✅ 所有代码在全局作用域中解析,类似 eval 但更受限、更安全(不访问当前作用域)
  • ⚠️ 性能较差,且存在潜在安全风险(如拼接不可信字符串)

对比示例:

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

下载
const x = 10;
const f1 = () => x + 1; // 可访问外层 x
const f2 = new Function('return x + 1'); // 报错:x is not defined(除非全局有 x)

实际可用的动态场景

虽然不推荐日常使用,但在特定工程场景中仍有价值:

  • 模板引擎编译(如早期的 Handlebars、ejs 的部分实现)
  • 沙箱环境中的受限逻辑注入(配合严格输入校验)
  • 配置驱动的简单计算逻辑(如表单校验规则、公式字段)
  • 调试工具中即时执行用户输入的 JS 表达式

注意:务必对 functionBody 字符串做白名单过滤或 AST 校验,禁止直接拼接用户输入。

替代方案建议

大多数需要“动态函数”的需求,其实有更安全、更可维护的替代方式:

  • 用对象映射代替字符串解析:{ add: (a,b) => a+b, multiply: (a,b) => a*b }
  • switch 或策略模式分发逻辑
  • 借助 eval(仅限可信上下文,且仍不如 Function 安全)
  • 现代方案:WebAssembly、插件化架构、JSON Schema + 解释器

除非明确需要运行时字符串编译,否则优先避开 Function 构造函数。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

83

2025.09.10

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

570

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

441

2024.03.13

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

565

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号