日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

module.exports,exports,export和export default,impor

時(shí)間:2018-11-14 14:48:24 類(lèi)型:JS/JQUERY
字號(hào):    

一、首先搞清楚一個(gè)基本問(wèn)題

    module.exportsexports是屬于CommonJS模塊規(guī)范!

    exportexport default是屬于ES6語(yǔ)法!

    同樣importrequire分別屬于ES6CommonJS!

二、知道屬于哪一塊的語(yǔ)法了還有一個(gè)明確點(diǎn):

module.exportsexports、exportexport default都是導(dǎo)出模塊;

importrequire則是導(dǎo)入模塊。

所以現(xiàn)在就不要弄混了,module.exports導(dǎo)出對(duì)應(yīng)require導(dǎo)入,export導(dǎo)出對(duì)應(yīng)import導(dǎo)入。

喂!等等,怎么才說(shuō)到module.exports導(dǎo)出對(duì)應(yīng)require導(dǎo)入,export導(dǎo)出對(duì)應(yīng)import導(dǎo)入,那還有exports和export default呢?。磕俏覀兝^續(xù)。

三、module.exportsexports的區(qū)別與聯(lián)系

講到這里就不得不稍微提一下模塊化:

Node應(yīng)用由模塊組成,采用CommonJS模塊規(guī)范。

 

根據(jù)這個(gè)規(guī)范,每個(gè)文件就是一個(gè)模塊,有自己的作用域。在一個(gè)文件里面定義的變量、函數(shù)、類(lèi),都是私有的,對(duì)其他文件不可見(jiàn)。

CommonJS規(guī)范規(guī)定,每個(gè)模塊內(nèi)部,module變量代表當(dāng)前模塊。這個(gè)變量是一個(gè)對(duì)象,它的exports屬性(即module.exports)是對(duì)外的接口。加載某個(gè)模塊,其實(shí)是加載該模塊的module.exports屬性。

var x = 5; var addX = function (value) { return value + x; }; module.exports.x = x; module.exports.addX = addX; 

上面代碼通過(guò)module.exports輸出變量x和函數(shù)addX。

require方法用于加載模塊。

var example = require('./example.js'); console.log(example.x); // 5 console.log(example.addX(1)); // 6

 

看了剛剛這段commonjs規(guī)范上面的介紹可以知道以下區(qū)別與聯(lián)系:

 

其實(shí)exports變量是指向module.exports,加載模塊實(shí)際是加載該模塊的module.exports。這等同在每個(gè)模塊頭部,有一行這樣的命令。

 

var exports = module.exports; 

 

于是我們可以直接在 exports 對(duì)象上添加方法,表示對(duì)外輸出的接口,如同在module.exports上添加一樣。注意,不能直接將exports變量指向一個(gè)值,因?yàn)檫@樣等于切斷了exports與module.exports的聯(lián)系。

三、exportexport default的區(qū)別與聯(lián)系

模塊功能主要由:export和import構(gòu)成。export導(dǎo)出模塊的對(duì)外接口,import命令導(dǎo)入其他模塊暴露的接口。

export其實(shí)和export default就是寫(xiě)法上面有點(diǎn)差別,一個(gè)是導(dǎo)出一個(gè)個(gè)單獨(dú)接口,一個(gè)是默認(rèn)導(dǎo)出一個(gè)整體接口。使用import命令的時(shí)候,用戶(hù)需要知道所要加載的變量名或函數(shù)名,否則無(wú)法加載。這里就有一個(gè)簡(jiǎn)單寫(xiě)法不用去知道有哪些具體的暴露接口名,就用export default命令,為模塊指定默認(rèn)輸出。

export可以這樣寫(xiě)

// testA.js var f = 'Miel'; var name = 'Jack'; var data= 1988;

export {f, name, data}; 

使用export命令定義了模塊的對(duì)外接口以后,其他 JS 文件就可以通過(guò)import命令加載這個(gè)模塊。

// main.js
import {f, name, data} from './testA'; 

export default可以這樣寫(xiě)

// export-default.js
export default function () {
  console.log('foo'); } 
// 或者寫(xiě)成 function foo() {
  console.log('foo'); }
export default foo;
// import-default.js
import customName from './export-default'; customName(); // 'foo' 

下面比較一下export default和export 輸出。

// 第一組
export default function car() { // 輸出  // ... }

import car from 'car'; // 輸入  // 第二組
export function car2() { // 輸出  // ... };

import {car2} from 'car2'; // 輸入 可以看到第一組是使用export default,import語(yǔ)句不需要使用大括號(hào);第二組使用export,對(duì)應(yīng)的import語(yǔ)句需要使用大括號(hào),一個(gè)模塊只能有一個(gè)默認(rèn)輸出,所以export default只能使用一次。

四、import和require的區(qū)別與聯(lián)系

看了上面其實(shí)已經(jīng)清楚了,import和require是分別屬于ES6和CommonJS的兩種導(dǎo)入模塊的語(yǔ)法而已