JavaScript模块中函数声明默认仅限本文件,需用export显式导出、import导入才能跨模块使用;未导出函数不可见、不可用、可能被tree-shaking移除。
JavaScript 函数声明在模块中不是“写完就能用”的独立存在,它默认只在当前文件内有效;要跨模块使用,必须配合 export 显式导出,并由其他模块用 import 正确导入。
即使你在模块顶部写了 function utils() { },只要没加 export,这个函数就完全被封装在当前模块作用域里。其他模块无论怎么 import 都拿不到它——这不是限制,而是模块系统的设计原则:天然隔离、按需暴露。
import * as mod from './x.js' 也收不到未导出的函数函数声明要共享,得选对导出语法,否则导入方会报错或解构失败:
export function formatTime() { } → 导入必须写 import { formatTime } from './x.js'
export default function initApp() { } → 导入可任意命名,如 import start from './x.js'
function helper() { } + export { helper },适合需要复用或条件导出的场景像 if (true) { export function foo() { } } 这种写法是语法错误。export 必须出现在模块顶层作用域,不能嵌套在条件、循环或函数内部。
立即学习“Java免费学习笔记(深入)”;
export 是静态解析,不支持动态逻辑export const api = isProd ? prodApi : devApi
函数声明在本模块内会被提升,但它的“可用性”取决于整个模块是否已执行完毕。如果 A 模块导入 B 模块,B 中的函数声明一定先于 A 中的任何调用生效。
initConfig()),避免执行顺序错乱import())会打破同步执行链,此时函数定义可能尚未就绪