import与export

模块功能主要由两个命令组成,Module的import命令和export命令,用来在js文件中暴露和接受变量、函数和类。

 

一、export命令

暴露的可以是变量,函数和类,语法如下:

let name="Alice";
let age=18;
let year=2009;
let person={
    name:"Tony",
    age:20
}
export {name,age,year};
export{person as student,person as teenager}

-

(1)暴露的对象必须加{},它表示暴露的是一个接口。如果不加的话,它表示暴露的是一个值,这样就会报错。比如下面这段代码,就是错误的。

var name="Alice";
export name;

-

(2)as关键字,可以给暴露的对象换名字,同一个对象可以多次使用as关键字,用不同的名字暴露出去。

(3)export命令必须处于模块的顶层,位置无所谓。

(4)export暴露的对象是动态绑定关系,如果发生变化,外部引用也会变化。

 

二、import命令

语法如下:

import {name,age,year as born} from "./main";

  import有以下几个特点:

(1)引用的文件可以省略.js后缀。

(2)可以使用as关键字。

(3)import具有变量提升的效果,所以放在引用的对象后面也无所谓。

(4)ES6的import命令最好不要跟CommonJS模块的require命令放在一块。因为import会变量提示,会最早解析。

(5)import接收对象是否用花括号括起来,要看对象的暴露方式。默认输出就不用加花括号,如果是export,就要加花括号。

 

 三、export default命令

import命令,在引用的时候必须得知道这个文件中所暴露的所有变量的名字。如果我不知道export变量的名字,怎么引用呢?就是在暴露的时候用export default命令,该命令为模块指定默认输出。

暴露:

export default function onlyOne(){
    console.log("只能用一次");
}
引用:
import only from "./main";
only();

 export default命令的特点:

(1)export default命令在一个模块中只能使用一次,因为是默认暴露值,所以默认的输出值只能是唯一的嘛。

(2)引用的时候不需要知道暴露的对象名,可以给他起随意的名字。

(3)引用的时候不需要加花括号。

 

-

实际实践:

Node是JS语言的服务器运行环境,他对ES6的支持度很高。虽然我的电脑上也安装了Node.js环境,但是这个倒霉孩子,电脑竟然不支持ES6的Module模块,虽然是为啥他不支持我也不明白。但这也就意味着上面的前两个命令我都没法用。

 import与export_第1张图片

看了看书,Node不支持ES6模块的原因我似乎知道了。

Node本身带有支持模块的功能,他支持CommonJS模块。

模块分为CommonJS里的模块与ES6里面的模块,这两种模块是不一样的东西。export命令和import命令是ES6里面的模块。 而CommonJS模块与ES6模块的功能不兼容。

 -

CommonJS模块与ES6模块的区别是什么呢?

(1)CommonJS暴露和加载的是一个对象,而ES6只是暴露和加载了一个接口。

(2)上面这个区别导致了,CommonJS的引用是静态的,而ES6的引用是动态绑定的。参见上面export命令的第(4)条。

 

在电脑不支持ES6Module的情况下,想要引用暴露的文件怎么办呢?就用CommonJS的模块。

暴露:module.exports={}方法

暴露的可以有变量、对象和方法。

let year=2009;
let person={
    name:"Tony",
    age:20
}
let test=function(){
    console.log("It is a function!")
}
module.exports={year,person,test};

 -

引入:let 对象名=require(“相对路径”);

引入的info是一整个对象。这种引入是CommonJS模块里的功能。

var info = require("./main.js");
console.log('引入文件', info);
info.test();

 -

注意:上面的这两种方法都不能使用as关键字。

 

转载于:https://www.cnblogs.com/qingshanyici/p/10748981.html

你可能感兴趣的:(import与export)