javascript模块中仅顶层声明的变量、函数、类或常量可被export导出;函数内let/const声明的局部变量因作用域限制无法导出,且export不可在函数内使用。

JavaScript 模块化中不能直接导出“局部变量”——因为 只有在模块顶层作用域声明的变量(即非函数/块级内部定义的)才能被 export。所谓“局部变量”,比如函数内用 let 或 const 声明的变量,作用域仅限于该函数,无法导出;export 只能作用于模块级(top-level)绑定。
哪些变量可以导出?
必须是模块顶层声明的变量、函数、类或常量:
-
export const API_KEY = 'xxx';✅(顶层 const) -
export let counter = 0;✅(顶层 let) -
export var DEBUG = true;✅(顶层 var,不推荐但合法) -
function helper() { ... } export { helper };✅(顶层函数声明 + 批量导出) -
const internal = 'secret'; export { internal };✅(顶层声明后导出) -
function foo() { const local = 42; export { local }; }❌(语法错误:export 不允许在函数内)
命名导出:按名暴露多个值
适合导出配置项、工具常量、多个函数等,导入时需用花括号精确匹配名称:
// config.jsexport const BASE_URL = 'https://api.dev';export const TIMEOUT_MS = 10000;export const IS_STAGING = false;
// main.jsimport { BASE_URL, TIMEOUT_MS } from './config.js';console.log(BASE_URL); // https://api.dev
默认导出:暴露一个主值(可自由命名)
每个模块仅允许一个 export default,导入时不加花括号,名字可自定:
// user.jsconst DEFAULT_USER = { id: 1, name: 'Guest' };export default DEFAULT_USER;
// app.jsimport currentUser from './user.js'; // 名字任意console.log(currentUser.name); // Guest
混合导出与重命名(提升可维护性)
当既要暴露多个具名项,又想提供一个默认入口对象时,可混合使用;导出时还能用 as 改名,避免命名冲突:
// constants.jsexport const MAX_RETRY = 5;export const RETRY_DELAY = 1000;export default { version: '2.1', author: 'team' };export { MAX_RETRY as MAX_ATTEMPTS };
// index.jsimport APP, { MAX_RETRY, MAX_ATTEMPTS } from './constants.js';console.log(APP.version); // '2.1'console.log(MAX_RETRY === MAX_ATTEMPTS); // true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











