当前位置: 首页 > 知识库问答 >
问题:

导出常量foo、导出默认foo和模块之间的差异。导出=foo

奚英朗
2023-03-14

我真的很困惑:

  1. 导出常量foo
  2. 导出默认foo
  3. 模块。出口=食品

我知道这些是非常基本的,但是有人能区分并向我解释一下吗?我真的很想明白。


共有3个答案

魏旭
2023-03-14

导出常量:导出常量(ES6)导出默认:导出对象(ES6)

上述声明是ECMA脚本2015(又名ES6)的实现。

在普通ES6JS文件中,可以导出任何对象(变量)或常量。请注意,虽然内部结构可以修改(奇怪),但您不能更改常量引用。

在ES6中,一个模块(脚本文件)可以有多个导出。

import {Obj1, Obj2} from module_file

来导出默认值,一个可以在模块中只有一个导出默认值。

单元出口=食品;是较旧的实现,与导出默认值相同。除非它是用require语句而不是import导入的

有关更多信息,请参阅https://developer.mozilla.org/en/docs/web/javascript/reference/statements/export

吕飞翼
2023-03-14

导出语句用于从给定文件(或模块)导出函数、对象或基元。

命名导出这是ES6 javascript中的命名导出

export const foo

它的导入方式如下:

import { foo } from 'path'

默认导出这是默认导出(可以使用任何名称导入)

export default foo

是这样输入的:

import bar from 'path'

这是在nodejs程序中使用的通用导出。

module.exports=foo;

它的导入方式如下:

var foo = require('path')

欲知详情

萧波峻
2023-03-14

让我们把这些一个接一个。

出口常数

 export const foo

这是命名导出的ES6导出语法。您可以有许多命名的出口。它说您想要导出变量foo的值,并且您还将该符号声明为该模块中的const

实际上,您不能像使用常量foo一样单独使用导出常量foo 全部由自己完成。相反,您必须为其分配一些内容:

export const foo = 12;

const仅适用于模块本身内部。它不会影响从另一端的模块导入值后,用户可以对该值执行的操作,因为在另一端(导入的位置),该值会复制到另一个变量中。如果另一个变量是使用import语句创建的,那么无论在导出端声明了什么,它都会在导入端自动执行const(您无法分配给它)。

这可以作为以下任一项导入:

import {foo as localFoo} from 'lib';
import {foo} from 'lib';

第一个将模块的foo属性导入到名为localFoo的变量中。第二个将模块的foo属性导入到一个名为foo的变量中。

导出默认值

export default foo

这也是ES6语法,表示您还希望导出变量foo的值,并且希望该值为默认值导出值,因此,如果有人只导入模块,而不导入模块的任何属性,这就是他们将获得的变量。每个模块只能有一个default导出。

在内部,默认导出实际上只是指定了特殊名称default的命名导出:

import localVar from 'myLib';

这将从myLib获取默认值导出,并将其值分配给名为localVar的本地声明变量。以上是这方面的简写:

import { default as localVar } from 'lib';

因此,默认导出只允许您为一个特定的导出提供快捷方式导入。ES6导入/导出语法旨在使默认导入/导出的语法尽可能简短。但是,由于显而易见的原因,每个模块只有一个默认属性。

单元出口

// inside of myModule
module.exports = foo;

这是node.js用于导出变量foo的值的语法,您将在顶层导出它。当有人使用此模块时:

let x = require('myModule');
console.log(x);    //  will show the value of `foo` from the previous module

这不是ES6语法,而是使用模块的常规ES5兼容语法。导出内置在节点中的基础结构。js。

 类似资料:
  • 模块“Transformer”解析为非模块实体,不能使用此构造导入。 如何导入类?其实我只是想利用那堂课。我不希望指令在我的代码中产生附带效应。我只想用它:'(

  • 我将Intellij与JavaFX12一起使用,作为一个单独的库。我设法让它成功了。我做了一个游戏,图形工作很好。现在我想创建一个菜单,带有一些按钮。当我尝试将按钮添加到场景的根时,它会抛出一个异常,有以下异常: 我谷歌了一下,发现了一些关于堆栈溢出的解决方案,对我不起作用。我的命令行参数如下(基于这些解决方案): 谢谢! 编辑1:最小可复制示例 > 下载最新的intellij 创建新的javaf

  • 我已经看到了从ES6中的另一个模块导入代码的以下两种变体: 和 其中是在文件中定义的ES6类 Module.js 这两种导入语句有什么区别?

  • 问题内容: 我想知道配置模块导出的最佳方法是什么。在下面的示例中,“ async.function”可以是FS或HTTP请求,为示例起见简化了该请求: 这是示例代码(asynmodule.js): 如何仅在执行异步回调后导出模块? 编辑 有关我的实际用例的简短说明:我正在编写一个模块,用于在fs.exists()回调中配置nconf(https://github.com/flatiron/ncon

  • 问题内容: 在Java中,这两个函数声明之间有什么区别? 在这里,您可以找到该问题的答案,但仅适用于 C / C ++ 。在这些语言中,两种声明样式的存在是完全有意义的。 但是在 Java 中这有什么意义呢? 问题答案: 后者在Java中是非法的。您不能声明这样的方法。您应该得到这样的错误: 因此,不仅没有意义-您根本找不到尝试使用此样式的有效代码。

  • 我试图上传一个图像到内存使用multer,然后处理它与夏普和保存到磁盘。当我尝试在我的中间件中做多个module.exports时。 错误是: TypeError FileUpload.Single不是函数 到目前为止的路线是: 当我刚刚有下面的路由之前,尝试添加图像处理,我没有得到一个错误;

  • 问题内容: 以前我可以做: 但是现在TypeScript(1.5)支持es6模块语法,在ES6模块语法中实现相同功能的正确方法是什么。 问题答案: 正确的方法是继续使用旧的导入语法。新的导入语法仅适用于ES模块,而旧的导入语法仅适用于ES6之前的模块。两者是截然不同的,有意如此。 导入模块’foo’的所有 属性 , 而不导入默认值。 来自功能的设计者: 导出默认声明始终声明一个名为default的