document.currentScript可直接获取当前执行的script元素节点,适用于内联、外部及动态插入脚本,但不支持模块脚本和异步回调,IE完全不支持。

在 script 标签中使用 document.currentScript 可以直接获取当前正在执行的 script 元素节点,无需手动添加 id 或查询 DOM,特别适合内联脚本、动态插入脚本或需要自识别上下文的场景。
适用场景与基本用法
document.currentScript 返回一个 HTMLScriptElement 对象,指向当前正在解析并执行的 <script> 标签。它只在脚本执行过程中有效,执行结束后可能返回 null(例如在异步回调中访问)。
- 适用于内联 script(
<script>...</script>)和外部 script(<script src="..."></script>) - 不支持在模块脚本(
type="module")中使用,此时该属性始终为null - 在动态创建并插入的 script 中也能正常工作,只要它是同步执行的
获取脚本属性与数据传递
常通过 dataset、src、textContent 等属性读取上下文信息,实现“脚本自描述”:
- 在 script 标签上添加自定义属性:
<script data-config='{"theme":"dark"}'>...</script> - 执行时读取:
const script = document.currentScript; const config = JSON.parse(script.dataset.config); - 判断是否为外部脚本:
if (script.src) { /* 加载的是外部文件 */ }
注意事项与兼容性
该 API 虽已被主流浏览器广泛支持(Chrome 29+、Firefox 4+、Edge 12+、Safari 8+),但仍需注意边界情况:
- 在
setTimeout、Promise.then等异步回调中访问会得到null,因执行上下文已切换 - IE 完全不支持,如需兼容 IE,可用
document.scripts[document.scripts.length - 1]作为降级方案(仅限同步脚本末尾) - 多个 script 并行加载时,不能依赖执行顺序,
currentScript始终指向“当前正在运行的那个”,不会错乱
替代方案对比
相比传统方式,currentScript 更简洁可靠:
- 不用手动设
id再getElementById—— 避免命名冲突和维护成本 - 不用遍历
document.scripts匹配src或内容 —— 性能更好,逻辑更清晰 - 比
this或函数作用域更准确 ——this在脚本中通常指向window,无节点信息


















