Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重学js —— modules:Imports #93

Open
lizhongzhen11 opened this issue Mar 24, 2020 · 0 comments
Open

重学js —— modules:Imports #93

lizhongzhen11 opened this issue Mar 24, 2020 · 0 comments
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN

Comments

@lizhongzhen11
Copy link
Owner

lizhongzhen11 commented Mar 24, 2020

modules:Imports

BoundNames

ImportDeclaration : import ImportClause FromClause

import myDefault from '/modules/my-module.js'; // 很多种,这里只列出最简单的
  1. 返回 ImportClauseBoundNames

ImportDeclaration : import ModuleSpecifier

import '/modules/my-module.js';
  1. 返回一个新的空 List

ImportClause : import ImportedDefaultBinding, NameSpaceImport

import myDefault, * as myModule from '/modules/my-module.js';
  1. 定义 namesImportedDefaultBindingBoundNames
  2. NameSpaceImportBoundNames 的元素加入到 names
  3. 返回 names

ImportClause : import ImportedDefaultBinding, NamedImports

import myDefault, {foo, bar} from '/modules/my-module.js';
  1. 定义 namesImportedDefaultBindingBoundNames
  2. NamedImportsBoundNames 的元素加入到 names
  3. 返回 names

NamedImports : { }

import {foo, bar} from '/modules/my-module.js';
  1. 返回一个新的空 List

ImportsList : ImportsList, ImportSpecifier

import {foo, bar, anotherLongModuleName as short} from '/modules/my-module.js';
  1. 定义 namesImportsListBoundNames
  2. ImportSpecifierBoundNames 的元素加入到 names
  3. 返回 names

ImportSpecifier : IdentifierName as ImportedBinding

import {reallyReallyLongModuleExportName as shortName} from '/modules/my-module.js';
  1. 返回 ImportedBindingBoundNames

ImportEntries

ImportDeclaration : import ImportClause FromClause

  1. 定义 moduleFromClauseModuleRequests 的唯一元素
  2. 返回 ImportClauseImportEntriesForModule,参数为 module

ImportDeclaration : import ModuleSpecifier

  1. 返回一个新的空 List

ImportEntriesForModule

伴有参数 module

ImportClause : ImportedDefaultBinding, NameSpaceImport

// 默认导出和全部导出共存
  1. 定义 entriesImportedDefaultBindingImportEntriesForModule,参数为 module
  2. NameSpaceImportImportEntriesForModule 的元素加入到 entries 中,参数为 module
  3. 返回 entries

ImportClause : ImportedDefaultBinding, NamedImports

// 默认导出和部分导出共存
  1. 定义 entriesImportedDefaultBindingImportEntriesForModule,参数为 module
  2. NamedImportsImportEntriesForModule 的元素加入到 entries 中,参数为 module
  3. 返回 entries

ImportedDefaultBinding : ImportedBinding

// 默认导出的绑定名
  1. 定义 localNameImportedBindingBoundNames 唯一元素
  2. 定义 defaultEntryImportEntry Record { [[ModuleRequest]]: module, [[ImportName]]: "default", [[LocalName]]: localName }
  3. 返回一个包含 defaultEntryList

NameSpaceImport : * as ImportedBinding

// 全部导出,用别名代替这个模块
  1. 定义 localNameImportedBinding 的字符串值
  2. 定义 entryImportEntry Record { [[ModuleRequest]]: module, [[ImportName]]: "*", [[LocalName]]: localName }
  3. 返回一个包含 entryList

NamedImports : { }

// 部分导出
  1. 返回一个新的空 List

ImportsList : ImportsList, ImportSpecifier

// 导出的多个绑定名,以及用别名代替
  1. 定义 specsImportsListImportEntriesForModule,参数为 module
  2. ImportSpecifierImportEntriesForModule 的元素加入到 specs 中,参数为 module
  3. 返回 specs

ImportSpecifier : ImportedBinding

// 导出的绑定名
  1. 定义 localNameImportedBindingBoundNames 唯一元素
  2. 定义 entryImportEntry Record { [[ModuleRequest]]: module, [[ImportName]]: localName, [[LocalName]]: localName }
  3. 返回一个包含 entryList

ImportSpecifier : IdentifierName as ImportedBinding

// 导出的绑定赋予别名
reallyReallyLongModuleExportName as shortName
  1. 定义 importNameIdentifierName 字符串值
  2. 定义 localNameImportedBinding 字符串值
  3. 定义 entryImportEntry Record { [[ModuleRequest]]: module, [[ImportName]]: importName, [[LocalName]]: localName }
  4. 返回一个包含 entryList

ModuleRequests

ImportDeclaration : import ImportClause FromClause

  1. 返回 FromClauseModuleRequests

ModuleSpecifier : StringLiteral

  1. 返回一个包含 StringLiteral 字符串值的 List
@lizhongzhen11 lizhongzhen11 added js基础 Good for newcomers 重学js 重学js系列 规范+MDN labels Mar 24, 2020
@lizhongzhen11 lizhongzhen11 changed the title 重学js —— module:Imports 重学js —— modules:Imports Mar 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN
Projects
None yet
Development

No branches or pull requests

1 participant