【问题标题】:What is the difference between qualified and unqualified imports in the new javascript ES6 module lingo?新的 javascript ES6 模块术语中合格和不合格的导入有什么区别?
【发布时间】:2016-01-22 18:28:02
【问题描述】:

我遇到了ExploringJS 中没有很好解释的这种区别

合格和不合格的导入工作方式相同(它们都是间接的)

有什么区别,因此这句话是什么意思?

【问题讨论】:

  • 请参阅this answer,它解释了 Haskell 中合格与不合格导入的概念(此概念延续到 ES6)。 TL;DR,合格的导入要求您在调用导入函数时指定包含函数的模块的名称。
  • 我用“不合格的 javascript”搜索 Stack Overflow,因为在同一本书中完全相同的句子,正如 Arijit 所说,没有得到很好的解释。我很欣赏@Jules 的评论,它重新指向了另一个答案,但我不想在精神上解析 Haskell 或任何其他语言来理解 JavaScript 中的这些概念。阅读了其他答案后,我认为它与命名与默认导出有关,导致合格与不合格的导入,但任何澄清/更正/扩展都会有所帮助。

标签: javascript ecmascript-6 es6-module-loader


【解决方案1】:

严格来说,JavaScrpit 中没有合格/不合格的导入。这些术语在 Axel Rauschmayer 博士的“探索 ES6”一书中在循环依赖的上下文中使用,大致意思是:

不合格导入(直接导入模块的一部分):

CommonJS:

var foo = require('a').foo // doesn't work with cyclic dependencies

ES2015:

import {foo} from 'a' // can work with cyclic dependencies*

合格导入(将整个模块作为命名空间导入):

CommonJS:

var a = require('a')
function bar() {
  a.foo() // can work with cyclic dependencies*
}
exports.bar = bar

ES2015:

import * as a from 'a'
export function bar() {
  a.foo() // can work with cyclic dependencies*
}

在 ES2015 中,默认导入也可以是限定导入(尽管有些人不同意),如果它们用作命名空间:

export default {
  fn1,
  fn2
}

使用循环依赖,您无法访问模块主体中的导入:

import {foo} from 'a' // 'a' is a cyclic dependency
foo() // doesn't work

【讨论】:

  • 不,默认导出的对象不合格。
猜你喜欢
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多