js如何调用另一个js

我请分析下,js如何调用另一个js
最新回答
深蓝菇凉

2026-10-23 19:13:34

在 JavaScript 中调用另一个 JavaScript 文件可通过以下三种主要方法实现,具体选择取决于文件位置、运行环境和项目需求:

一、直接通过 <script> 标签引入

适用场景:文件位于同一目录或可公开访问的静态资源路径,无需复杂依赖管理。实现方式:在 HTML 文件中插入 <script> 标签,通过 src 属性指定目标文件路径:

<script src="./other-script.js"></script>

特点:

  • 同步加载:浏览器会阻塞后续代码执行,直到文件加载完成。
  • 全局作用域:被引入文件的变量、函数会直接暴露在全局作用域中,可能引发命名冲突。
  • 简单直接:适合小型项目或快速原型开发。

示例:若 other-script.js 定义了函数 showMessage(),引入后可直接调用:

showMessage(); // 直接使用全局函数二、通过 AJAX 动态加载

适用场景:需要跨域获取文件,或需在运行时动态决定加载哪些脚本。实现方式:使用 XMLHttpRequest 或 fetch 异步获取文件内容,并通过 eval() 或动态创建 <script> 标签执行。

方法 1:XMLHttpRequest + eval

const xhr = new XMLHttpRequest();xhr.open("GET", "
https://example.com/other-script.js"
);xhr.onload = function() { eval(xhr.responseText); // 执行获取的代码 // 调用文件中的函数(需确保函数已定义) if (typeof showMessage === 'function') { showMessage(); }};xhr.send();

方法 2:动态创建 <script> 标签

const script = document.createElement('script');script.src = "
https://example.com/other-script.js";script.onload
= function() { console.log("脚本加载完成");};document.head.appendChild(script);

特点:

  • 异步加载:不阻塞页面渲染,适合大型文件或非关键依赖。
  • 跨域限制:需目标服务器配置 CORS 头(如 Access-Control-Allow-Origin: *),否则浏览器会阻止请求。
  • 安全性风险:eval() 可能执行恶意代码,需确保文件来源可信。
三、使用模块加载器(推荐)

适用场景:现代前端项目(如 React/Vue),需模块化、按需加载和依赖管理。常见模块规范:

1. CommonJS(Node.js 环境)

通过 require 同步引入模块,返回模块导出对象:

// 引入模块const otherScript = require("./other-script.js");// 调用模块方法otherScript.init();

特点:

  • 同步加载,适合服务器端(Node.js)。
  • 需配合打包工具(如 Webpack、Browserify)在浏览器中使用。
2. AMD(异步模块定义)

通过 define 定义模块,require 异步加载:

// 定义模块(other-script.js)define([], function() { return { init: function() { console.log("模块初始化"); } };});// 加载模块require(["other-script"], function(otherScript) { otherScript.init();});

特点:

  • 异步加载,适合浏览器端。
  • 需引入 RequireJS 等库。
3. ES Modules(现代标准)

通过 import/export 语法实现静态模块化:

// 导出模块(other-script.js)export function init() { console.log("模块初始化");}// 引入模块import { init } from "./other-script.js";init();

特点:

  • 浏览器原生支持(需在 <script> 标签中添加 type="module"):<script type="module" src="main.js"></script>
  • 静态分析依赖,支持 Tree Shaking 优化。
  • 需注意跨域问题(本地开发需启动服务器,如 http-server)。
注意事项
  1. 加载顺序:确保被调用的脚本已加载完成,否则会引发 ReferenceError。可通过监听 load 事件或使用模块加载器的回调机制解决。
  2. 跨域问题:

    AJAX 请求需目标服务器配置 CORS。

    模块加载器(如 ES Modules)在本地文件系统(file:// 协议)下可能受限,建议使用开发服务器。

  3. 作用域隔离:避免全局污染,优先使用模块化方案(如 ES Modules)。
  4. 性能优化:

    合并多个脚本减少 HTTP 请求。

    使用 defer 或 async 属性优化 <script> 标签加载。

总结
  • 简单项目:直接使用 <script> 标签。
  • 动态加载/跨域:选择 AJAX 或动态创建 <script> 标签。
  • 模块化开发:优先使用 ES Modules,次选 CommonJS/AMD。
  • 生产环境:结合打包工具(如 Webpack、Rollup)进一步优化依赖管理和代码分割。