美文网首页
ES6-import(2)

ES6-import(2)

作者: 吴高亮 | 来源:发表于2019-01-20 10:33 被阅读0次

使用export进行指定模块的输出;使用import进行加载指定的模块;这就是规范;就行指定的define和require一样;这个就是规范;其实就是指定输入和输出的方法;大家去遵守;没必要问为什么;当你对一个事物足够熟悉后;你的疑问就会慢慢被你自己解答;不扯没用的;看些基础语法;

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};
//main.js
import {firstName,lastName,year} from './profile.js';
function setName(element){
  element.textContent=firstName+','+lastName;
};
实际上就这么简单;这些都是一些基础语法;看看真么用着方便;继续往下看;

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。
如果想要改命名;可以使用as进行输出的模块进行重新命名;如下

import {lastName as surname} from './profile.js';
下面的写法是错的;
import {a} from './profile.js';
a = {}; // Syntax Error : 'a' is read-only;
这样的抛出异常的因为;输出的代码是只读的;不允许在加载的脚本中需改;

上面代码中,脚本加载了变量a,对其重新赋值就会报错,因为a是一个只读的接口。但是,如果a是一个对象,改写a的属性是允许的。

import {a} from './xxx.js'

a.foo = 'hello'; // 合法操作

上面代码中,a的属性可以成功改写,并且其他模块也可以读到改写后的值。不过,这种写法很难查错,建议凡是输入的变量,都当作完全只读,轻易不要改变它的属性。

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

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

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

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

由于import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。
// 报错
import { 'f' + 'oo' } from 'my_module';

// 报错
let module = 'my_module';
import { foo } from module;

// 报错
if (x === 1) {
  import { foo } from 'module1';
} else {
  import { foo } from 'module2';
}
上面三种写法都会报错,因为它们用到了表达式、变量和if结构。在静态分析阶段,这些语法都是没法得到值的。

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

模块的整体加载;

除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

下面是一个circle.js文件,它输出两个方法area和circumference。

// circle.js

export function area(radius) {
  return Math.PI * radius * radius;
}

export function circumference(radius) {
  return 2 * Math.PI * radius;
};
//现在要加载

// main.js

import { area, circumference } from './circle';

console.log('圆面积:' + area(4));
console.log('圆周长:' + circumference(14));
同样也可以使用一下的方式;
import * as circle from './circle';

console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));

注意,模块整体加载所在的那个对象(上例是circle),应该是可以静态分析的,所以不允许运行时改变。下面的写法都是不允许的。

import * as circle from './circle';

// 下面两行都是不允许的
circle.foo = 'hello';
circle.area = function () {};

相关文章

  • ES6-import(2)

    使用export进行指定模块的输出;使用import进行加载指定的模块;这就是规范;就行指定的define和req...

  • 解决node对es6-import语法支持

    方案一:将文件后缀改为 .mjs 方案二:使用babel插件将es6转码为es5 需要加入'.babelrc'文件...

  • DAY 2(2/2)

    五彩滩声名在外,但是我们去的时候在休整,我们十分不甘心,根据各种攻略告诉我们在景区出口有村民守着问你要不要去五彩滩...

  • 2-2-2

    自由写作群 转化与蜕变 继续刚才的梦的后记 我想梦是用最形象的比喻告诉我内在正在经历着发生着什么,这是潜意识里已经...

  • 2 (2)

    突然想到Jenny ,那个有些神经质的女孩儿。 对我来说,Jenny 给我最深的印象是作家。作为一个作家,她的灵感...

  • 2-2-2 RelativeLayout

    标注:本文为个人整理,仅做自己学习参考使用,请勿转载和转发2018-06-03: 初稿,参考博主coder-pig...

  • 2️⃣0️⃣2️⃣0️⃣🔚🔜2️⃣0️⃣2️⃣1️⃣

    今天风小了,夕阳很平静,但2020年终究是不平静的一年。 不平静的2020年,第一次有了一张小区出入证。不能飞去热...

  • 2-2

    ❤️起步,️️(若起步的右车道前方无车,可以不用转到左车道; 转发了右车道一定要变更车道) 一段车程 ❤️右转,右...

  • < маленький принц > 2-2

    Итак, в первый вечер я уснул на песке в пустыне, где на...

  • 2-2

    悠闲的一天。

网友评论

      本文标题:ES6-import(2)

      本文链接:https://www.haomeiwen.com/subject/paxxjqtx.html