在新的javascript ES6模块行话中,合格导入和不合格导入之间有什么区别?

在新的javascript ES6模块行话中,合格导入和不合格导入之间有什么区别?,javascript,ecmascript-6,es6-module-loader,Javascript,Ecmascript 6,Es6 Module Loader,我遇到了这一区别,但并没有很好地解释 合格进口和不合格进口的工作方式相同(它们都是间接的) 区别是什么?因此,这句话的意思是什么?严格来说,JavaScrpit中没有合格/不合格的导入。Axel Rauschmayer博士在《探索ES6》一书中,在循环依赖的背景下使用了这些术语,其大致意思是: 不合格导入(直接导入模块的一部分): 普通的 ES2015 限定导入(将整个模块作为命名空间导入): 普通的 ES2015 在ES2015中,默认导入也可以是限定导入(尽管有些人不同意),如果它们用作命名

我遇到了这一区别,但并没有很好地解释

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

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

严格来说,JavaScrpit中没有合格/不合格的导入。Axel Rauschmayer博士在《探索ES6》一书中,在循环依赖的背景下使用了这些术语,其大致意思是: 不合格导入(直接导入模块的一部分): 普通的 ES2015 限定导入(将整个模块作为命名空间导入): 普通的 ES2015 在ES2015中,默认导入也可以是限定导入(尽管有些人不同意),如果它们用作命名空间:

export default {
  fn1,
  fn2
}
*对于循环依赖项,您无法访问模块主体中的导入:

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

请参阅,这解释了Haskell中合格与不合格进口的概念(此概念延续至ES6)。TL;DR,限定导入要求您在调用导入函数时指定包含函数的模块的名称。我使用“非限定javascript”搜索堆栈溢出,因为同一本书中的同一句话,正如Arijit所说,这句话没有得到很好的解释。我很欣赏@Jules的评论,它重新指向了另一个答案,但我不想让Haskell或任何其他语言来理解JavaScript中的这些概念。阅读了另一个答案后,我认为这与命名vs默认导出导致合格vs不合格导入有关,但任何澄清/更正/扩展都会有所帮助。不,默认导出对象是不合格的。
var a = require('a')
function bar() {
  a.foo() // can work with cyclic dependencies*
}
exports.bar = bar
import * as a from 'a'
export function bar() {
  a.foo() // can work with cyclic dependencies*
}
export default {
  fn1,
  fn2
}
import {foo} from 'a' // 'a' is a cyclic dependency
foo() // doesn't work