import 命令

使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

  1. // main.js
  2. import {firstName, lastName, year} from './profile';
  3. function setName(element) {
  4. element.textContent = firstName + ' ' + lastName;
  5. }

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。

如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。

  1. import { lastName as surname } from './profile';

ES6 import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径,.js后缀可以省略。如果只是模块名,不带有路径,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。

  1. import {myMethod} from 'util';

上面代码中,util是模块文件名,由于不带有路径,必须通过配置,告诉引擎怎么取到这个模块。

注意,import命令具有提升效果,会提升到整个模块的头部,首先执行。

  1. foo();
  2. import { foo } from 'my_module';

上面的代码不会报错,因为import的执行早于foo的调用。这种行为的本质是,import命令是编译阶段执行的,在代码运行之前。

由于import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。

  1. // 报错
  2. import { 'f' + 'oo' } from 'my_module';
  3. // 报错
  4. let module = 'my_module';
  5. import { foo } from module;
  6. // 报错
  7. if (x === 1) {
  8. import { foo } from 'module1';
  9. } else {
  10. import { foo } from 'module2';
  11. }

上面三种写法都会报错,因为它们用到了表达式、变量和if结构。在静态分析阶段,这些语法都是没法得到值的。

最后,import语句会执行所加载的模块,因此可以有下面的写法。

  1. import 'lodash';

上面代码仅仅执行lodash模块,但是不输入任何值。

如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。

  1. import 'lodash';
  2. import 'lodash';

上面代码加载了两次lodash,但是只会执行一次。

  1. import { foo } from 'my_module';
  2. import { bar } from 'my_module';
  3. // 等同于
  4. import { foo, bar } from 'my_module';

上面代码中,虽然foobar在两个语句中加载,但是它们对应的是同一个my_module实例。也就是说,import语句是 Singleton 模式。

目前阶段,通过 Babel 转码,CommonJS 模块的require命令和 ES6 模块的import命令,可以写在同一个模块里面,但是最好不要这样做。因为import在静态解析阶段执行,所以它是一个模块之中最早执行的。下面的代码可能不会得到预期结果。

  1. require('core-js/modules/es6.symbol');
  2. require('core-js/modules/es6.promise');
  3. import React from 'React';

es6 import 命令相关推荐

  1. 【ES6】模块功能的实现--export / import 命令

    历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJ ...

  2. es6 export 命令

    export 命令 ES6的模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一个模块就是一个独立的文件.该 ...

  3. bat for循环_bat教程[279] reg import命令的用法

    古树屋Click to follow us C:\Users\86137>reg import /?REG IMPORT FileName[/reg:32 | /reg:64] FileName ...

  4. ES6 import代码智能转换Babel插件: babel-plugin-imports-transform

    babel-plugin-imports-transform ES6 import代码智能转换Babel插件,优化(webpack等)打包构建体积. Github地址: https://github. ...

  5. mysql import 命令_MySQL命令详解:mysqlimport

    MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的命令行工具. 使用mysqlimport -?命令,可以查看mysqlimport的具体参数 ...

  6. es6 import和require用法和区别

    写个简单js文件,假设名字为:lib.js . 假设内容如下: export const sqrt = Math.sqrt; export function square(x) {return x * ...

  7. ES6 import export

    export deault function() { };import './a'; //表示直接执行a.js中的内容,如果有多个这条语句,只会执行一次 import A from './a'; // ...

  8. Docker学习总结(54)——save,load,import 命令有何区别

    docker save 保存的是镜像(常用) docker load 加载的镜像(常用) docker export 保存的是容器container docker import 是加载的容器conta ...

  9. ES6 - let命令

    基本用法 (1)let 命令用来声明变量,用法类似于 var ,但是所声明的变量只在 let 命令所在的代码块内有效: if(true){let a = 100var b = 100 }console ...

最新文章

  1. 正确高效使用数据库不可不知的索引失效问题
  2. 干货回顾 | 泛娱乐社交 APP 出海的破与立
  3. Nginx 简单的cpu配置
  4. string 类的初始化和赋值(程序成长之路的一颗米)
  5. 16.Java中的String详解
  6. SVN教程 -- 基于自己学习记录
  7. ECSHOP 商品详情页相关属性商品 由新到旧排序
  8. 【原创】Mapped Statements collection does not contain value for DaoImpl.method
  9. 2017年高校网络信息安全管理运维挑战赛部分题解
  10. PyTorch学习(九)--用CNN模型识别手写数字数据集MNIST
  11. 「抖音同款播放器」上市:卡顿、黑屏和模糊,这些技术来解决
  12. 浅谈大数据和人工智能
  13. 高山仰止,景行行止。虽不能至,然心向往之。
  14. Skydio 2在行动中的第一响应者部署显示了无人机自主权
  15. dbt2 mysql_2.5.4 数据库测试套件中的dbt2 TPC-C 测试
  16. 六面体单元的体积计算方法
  17. 日本多城现共享单车 日网友:感受到中国式刺激
  18. linux文件权限记录,linux文件权限学习记录
  19. Socket和ServerSocket的介绍
  20. 水表读数图解_水表读数怎么正确看 水表怎么读?

热门文章

  1. Percona-tookit学习笔记(一)
  2. XP添加权限时提示:无法显示用户选项对话框的解决方法!
  3. Linux的shell编程
  4. 经济下行,我们该如何避免焦虑?
  5. 默认web地址_SpringMVC详解----Web层
  6. sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案
  7. Python使用itchat获取微信好友
  8. Area of Circles II(数论)
  9. 面向过程和面向对象的本质理解
  10. Android聊天背景图片变形解决方案