default6中default的作用?

半兽人 发表于: 2025-02-21   最后更新时间: 2025-04-19 16:16:10  
{{totalSubscript}} 订阅, 38 游览

default 是 ES6 模块(import/export)的特性,通常用于获取模块的 默认导出。为了更好地理解为什么要加 default,我们先来看一下 ES6 模块的基本概念和 CommonJS 模块的差异。

1. ES6 模块和 CommonJS 模块的导出差异

ES6 模块(import/export

ES6 模块使用 exportimport 来导出和导入模块。一个模块可以有多个导出,也可以有一个默认导出。

示例:

// foo.js
export const foo = 'bar';       // 命名导出
export default function() {     // 默认导出
  console.log('Hello World');
}

在其他文件中导入时:

import foo, { foo } from './foo';  // 导入默认导出和命名导出
  • import foo from './foo' 引入的是 默认导出
  • import { foo } from './foo' 引入的是 命名导出

CommonJS 模块(require

CommonJS 是 Node.js 的模块系统,它通常通过 module.exports 导出模块。默认导出是通过 module.exports 来实现的。

示例:

// foo.js (CommonJS)
module.exports = function() {
  console.log('Hello World');
}

在其他文件中导入时:

const foo = require('./foo');  // 导入默认导出

2. default 的作用

Webpack 在处理 ES6 模块时,会自动将默认导出转换成一个对象。这个对象包含一个 default 属性,这个属性对应的是默认导出的内容。

为什么要加 default

在 CommonJS 模块系统中,默认导出是直接返回的,而在 ES6 模块中,默认导出是作为一个对象的 default 属性存储的。

举个例子:

假设你在使用 require 来引入一个 ES6 模块,它会被打包成 CommonJS 模块格式。这个打包后的模块会有一个 default 属性,里面存储的是你模块的默认导出内容。

举个例子:

假设 TiAccordion 组件是一个默认导出的 ES6 模块,Webpack 会把它转换为:

// 转换后的模块
module.exports = {
  default: function TiAccordion() {
    // ...
  }
};

所以如果你使用 require(30) 获取的模块是这样的结构:

var TiAccordionModule = require(30);   // TiAccordionModule = { default: function TiAccordion() {...} }

如果你直接访问 TiAccordionModule,你会得到一个包含 default 的对象。所以我们需要通过 TiAccordionModule.default 来获取默认导出:

var TiAccordion = TiAccordionModule.default;  // 访问到默认导出的函数或对象

3. 总结:

  • default:是 ES6 模块的默认导出,Webpack 在转换时会把默认导出的内容放在 default 属性里。
  • 当你使用 require(x) 获取 ES6 模块时,返回的是一个包含 default 属性的对象,默认导出的内容就在这个属性里。
  • 所以你需要加 default 来访问模块的默认导出内容。

例子:

var TiAccordion = require(30).default;  // 获取模块的默认导出

如果模块本身是通过 CommonJS 风格导出的(没有使用 export default),则不需要 .default,因为模块内容本身就直接是默认导出的对象。

ES6
更新于 2025-04-19

查看javascript更多相关的文章或提一个关于javascript的问题,也可以与我们一起分享文章