新的javascript ES6模块术语中的合格和不合格导入有什么区别?

Ari*_*rya 6 javascript ecmascript-6 es6-module-loader

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

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

区别是什么,因此该陈述的含义是什么?

mar*_*lin 4

严格来说,JavaScrpit 中不存在合格/不合格导入之类的东西。这些术语在 Axel Rauschmayer 博士的《Exploring ES6》一书中在循环依赖的背景下使用,大致意思是:

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

通用JS:

var foo = require('a').foo // doesn't work with cyclic dependencies
Run Code Online (Sandbox Code Playgroud)

ES2015:

import {foo} from 'a' // can work with cyclic dependencies*
Run Code Online (Sandbox Code Playgroud)

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

通用JS:

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

ES2015:

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

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

export default {
  fn1,
  fn2
}
Run Code Online (Sandbox Code Playgroud)

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

import {foo} from 'a' // 'a' is a cyclic dependency
foo() // doesn't work
Run Code Online (Sandbox Code Playgroud)