当前位置: 首页 > news >正文

如何动态执行 JS 脚本

场景

在实际的业务开发中,我们可能需要将一段字符串代码动态执行,我们看一个例子:

// 如何将字符串 code 当成 js 代码执行
function exec(code) {}exec('console.log("Hello world")')

eval 函数

eval()函数 是一种接受字符串作为参数,并且可以将接受的字符串转换成js表达式并且立即执行该表达式。

const a = 1;
function exec(code) {const a = 2;eval(code);
}exec('console.log(a)');
console.log('sync');// 执行结果:先输出 2,再输出 sync

特点:同步执行,其作用域为当前执行作用域

setTimeout

setTimeout 的第一个参数,可以是一个函数,也可以是一个代码串,那么我们就可以利用其特点来实现动态 js 脚本

const a = 1;
function exec(code) {const a = 2;setTimeout(code);
}exec('console.log(a)');
console.log('sync');// 执行结果:先输出 sync,再输出 1

特点:异步执行,其作用域为全局作用域

动态 script 标签

动态script标签 方法就是我们创建一个 script 标签元素对象,将其插入到当前 Dom

const a = 1;
function exec(code) {const a = 2;var script = document.createElement('script');script.innerHTML = code;document.body.appendChild(script);
}exec('console.log(a)');
console.log('sync');// 执行结果:先输出 1,再输出 sync

特点:同步执行,其作用域为全局作用域

new Function

所有函数方法的原型对象是 Function ,我们可以通过 new Function() 示例来生成一个方法,再执行就可动态执行 js 脚本

const a = 1;
function exec(code) {const a = 2;new Function(code)();
}exec('console.log(a)');
console.log('sync');// 执行结果:先输出 1,再输出 sync

特点:同步执行,其作用域为全局作用域

总结

具体的实现方案可根据当前的业务场景来选择,但是不推荐 动态script标签,毕竟是通过操作 Dom 实现的。

方法同步/异步作用域
eval同步当前执行作用域
setTimeout异步全局作用域
动态 script 标签同步全局作用域
new Function同步全局作用域
http://www.lryc.cn/news/614036.html

相关文章:

  • 机器学习概念2
  • [linux] Linux:一条指令更新DDNS
  • 如何在本地使用 DeepSeek Janus-Pro
  • 2025 前端真实试题-阿里面试题分析
  • camera人脸识别问题之二:【FFD】太阳逆光场景,人像模式后置打开美颜和滤镜,关闭heif拍摄格式对着人脸拍照,成像口红出现位置错误
  • 富士 Instax 12 和 Instax Mini 11 有什么区别?推荐购买哪一款?
  • 使用OAK相机实现智能物料检测与ABB机械臂抓取
  • Java学习第一百一十七部分——ClickHouse
  • 9:USB摄像头的最后一战(上):MP4音视频合封!
  • 企业AI的双层技术栈架构:融合社区创新与企业级管控的设计蓝图
  • Pytest项目_day10(接口的参数传递)
  • JAVA基础-集合框架
  • 【新启航】航空飞机起落架深孔型腔的内轮廓测量方法探究 - 激光频率梳 3D 轮廓检测
  • Alkimi 与 Sui 合作,修复「破碎」的广告生态
  • Upscayl – 免费开源的 AI 图像放大工具,跨平台使用
  • 使用 Setup Project 打包
  • EI学术会议 | 机械制造、智能控制
  • spaCy study notes[1]
  • 使用Python+selenium实现第一个自动化测试脚本
  • MySQL的触发器:
  • 什么是Serverless(无服务器架构)
  • ORACLE看当前连接数的方法
  • pycharm常见环境配置和快捷键
  • isulad + harbor私有仓库登录
  • 特征值和特征向量的直觉
  • 【大模型】(实践版)Qwen2.5-VL-7B-Instruct模型量化以及运行测试
  • MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的运营策略创新研究
  • k8s调度问题
  • Android 的CameraX的使用(配置,预览,拍照,图像分析,录视频)