最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS module的導(dǎo)出和導(dǎo)入的實(shí)現(xiàn)代碼

 更新時(shí)間:2019年02月25日 11:03:21   作者:KevinYan  
這篇文章主要介紹了JS module的導(dǎo)出和導(dǎo)入的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

最近看了些Vue框架寫的程序,發(fā)現(xiàn)自己的前端知識(shí)還停留在幾年以前,發(fā)現(xiàn)現(xiàn)在Javascript程序里有各種各樣的對(duì)module的導(dǎo)入和到處,導(dǎo)入乍一看跟python的語(yǔ)法挺像的無(wú)非就是把from和import這兩個(gè)關(guān)鍵詞的使用顛倒了一下順序。仔細(xì)看下來(lái)還是和python挺不一樣的import模塊的前提是模塊有導(dǎo)出,并且還分默認(rèn)導(dǎo)出和命名導(dǎo)出,有些麻煩。所以今天這篇文章就把所有的export形式和相應(yīng)的import使用匯總一下。

ES6在語(yǔ)言標(biāo)準(zhǔn)的層面上,實(shí)現(xiàn)了模塊功能,成為瀏覽器和服務(wù)器通用的模塊解決方案,完全可以取代 CommonJS 和 AMD 規(guī)范,基本特點(diǎn)如下:

  • 每一個(gè)模塊只加載一次, 每一個(gè)JS只執(zhí)行一次, 如果下次再去加載同目錄下同文件,直接從內(nèi)存中讀取;
  • 每一個(gè)模塊內(nèi)聲明的變量都是局部變量, 不會(huì)污染全局作用域;
  • 模塊內(nèi)部的變量或者函數(shù)可以通過(guò)export導(dǎo)出;
  • 一個(gè)模塊可以導(dǎo)入別的模塊

2.模塊功能主要由兩個(gè)命令構(gòu)成:export和import。export命令用于規(guī)定模塊的對(duì)外接口,import命令用于輸入其他模塊提供的功能;

3.一個(gè)模塊就是一個(gè)獨(dú)立的文件,該文件內(nèi)部的所有變量,外部無(wú)法獲取。如果你希望外部能夠讀取模塊內(nèi)部的某個(gè)變量,就必須使用export關(guān)鍵字輸出該變量;

var year = '2018';
var month = 'Febuary';
export {year, month};

export 導(dǎo)出模塊

export語(yǔ)法聲明用于導(dǎo)出函數(shù)、對(duì)象、指定文件(或模塊)的原始值。 有兩種模塊導(dǎo)出方式:命名式導(dǎo)出(名稱導(dǎo)出)和默認(rèn)導(dǎo)出(定義式導(dǎo)出),命名式導(dǎo)出每個(gè)模塊可以有多個(gè),而默認(rèn)導(dǎo)出每個(gè)模塊僅一個(gè) 。

命名式導(dǎo)出

模塊可以通過(guò)export前綴關(guān)鍵詞聲明導(dǎo)出對(duì)象,導(dǎo)出對(duì)象可以是多個(gè)。這些導(dǎo)出對(duì)象用名稱進(jìn)行區(qū)分,稱之為命名式導(dǎo)出

export { func }; // 導(dǎo)出一個(gè)已定義的函數(shù)func
export const foo = Math.sqrt(100); // 導(dǎo)出一個(gè)常量

我們可以使用*和from關(guān)鍵字來(lái)實(shí)現(xiàn)的模塊的繼承:

export * from 'base_module';

模塊導(dǎo)出時(shí),可以指定模塊的導(dǎo)出成員。導(dǎo)出成員可以認(rèn)為是類中的公有成員,而非導(dǎo)出成員可以認(rèn)為是類中的私有成員:

var name = 'Kevin的居酒屋';
var domain = 'http://coffee.toast.com';
 
export {name, domain}; // 相當(dāng)于導(dǎo)出{name:name,domain:domain}

模塊導(dǎo)出時(shí),我們可以使用as關(guān)鍵字對(duì)導(dǎo)出成員進(jìn)行重命名,上面的導(dǎo)出可以這樣寫:

export {name as siteName, domain}

注意一下語(yǔ)法錯(cuò)誤:

export 1; 
var a = 100;
export a;

export在導(dǎo)出接口的時(shí)候,必須與模塊內(nèi)部的變量具有一一對(duì)應(yīng)的關(guān)系。直接導(dǎo)出1沒(méi)有任何意義,也不可能在import的時(shí)候有一個(gè)變量與之對(duì)應(yīng)export a雖然看上去成立,但是a的值是一個(gè)數(shù)字,根本無(wú)法完成解構(gòu),因此必須寫成export {a}的形式。即使a被賦值為一個(gè)函數(shù),也是不建議使用上面的形式導(dǎo)出的因?yàn)榇蟛糠诛L(fēng)格都建議,模塊中最好在末尾用一個(gè)export導(dǎo)出所有的接口,就像上面那些例子一樣。

默認(rèn)導(dǎo)出

默認(rèn)導(dǎo)出也被稱做定義式導(dǎo)出。命名式導(dǎo)出可以導(dǎo)出多個(gè)值,但在import引用時(shí),也要使用相同的名稱來(lái)引用相應(yīng)的值。默認(rèn)導(dǎo)出只有導(dǎo)出一個(gè)單一值,這個(gè)輸出可以是一個(gè)函數(shù)、類或其它類型的值,這樣在模塊import導(dǎo)入時(shí)也會(huì)更 容易引用。

export default function() {}; // 導(dǎo)出一個(gè)函數(shù)
export default class(){}; // 導(dǎo)出一個(gè)類

默認(rèn)導(dǎo)出可以理解為另一種形式的命名導(dǎo)出,默認(rèn)導(dǎo)出可以認(rèn)為是使用了default名稱的命名導(dǎo)出。

下面兩種導(dǎo)出方式是等價(jià)的:

const D = 123; 
export default D;
export { D as default };

使用名稱導(dǎo)出一個(gè)模塊時(shí):

// "my-module.js" 模塊
function cube(x) {
  return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
export { cube, foo };

在另一個(gè)模塊(js文件)中,我們可以像下面這樣引用:

import { cube, foo } from 'my-module';
console.log(cube(3));
console.log(foo);

使用默認(rèn)導(dǎo)出一個(gè)模塊時(shí):

// "my-module.js"模塊
export default function (x) {
return x * x * x;
}

在另一個(gè)模塊中,我們可以像下面這樣引用,相對(duì)名稱導(dǎo)出來(lái)說(shuō)使用更為簡(jiǎn)單:

import cube from 'my-module';
console.log(cube(3)); // 27

import導(dǎo)入模塊

import語(yǔ)法聲明用于從已導(dǎo)出的模塊、腳本中導(dǎo)入函數(shù)、對(duì)象、指定文件(或模塊)的原始值。import模塊導(dǎo)入與export模塊導(dǎo)出功能相對(duì)應(yīng),也存在兩種模塊導(dǎo)入方式:命名式導(dǎo)入(名稱導(dǎo)入)和默認(rèn)導(dǎo)入(定義式導(dǎo)入)。

注意事項(xiàng): import必須放在文件的最開(kāi)始,且前面不允許有其他邏輯代碼,這和其他所有編程語(yǔ)言的導(dǎo)入風(fēng)格一致。

命名導(dǎo)入

我們可以通過(guò)指定名稱將導(dǎo)入成員插入到當(dāng)作用域中??梢詫?dǎo)入單個(gè)成員或多個(gè)成員:

注意,花括號(hào)里面的變量與export后面的變量一一對(duì)應(yīng)

import {myMember} from "my-module";
import {foo, bar} from "my-module";

通過(guò)*符號(hào),我們可以導(dǎo)入模塊中的全部屬性和方法。當(dāng)導(dǎo)入模塊全部導(dǎo)出內(nèi)容時(shí),就是將導(dǎo)出模塊('my-module.js')所有的導(dǎo)出綁定內(nèi)容,插入到當(dāng)前模塊('myModule')的作用域中:

import * as myModule from "my-module";

默認(rèn)導(dǎo)入

在模塊導(dǎo)出時(shí),可能會(huì)存在默認(rèn)導(dǎo)出。同樣的,在導(dǎo)入時(shí)可以使用import指令導(dǎo)入這些默認(rèn)值。直接導(dǎo)入默認(rèn)值:

import defaultName from "my-module";
import myDefault, {foo, bar} from "my-module"; // 指定成員導(dǎo)入和默認(rèn)導(dǎo)入

default關(guān)鍵字

// my-module.js
export default function() {}
 
// 等效于:
function func() {};
export {func as default};

在import的時(shí)候,可以這樣用:

import a from './my-module';
// 等效于,或者說(shuō)就是下面這種寫法的簡(jiǎn)寫
import {default as a} from './my-module';

這個(gè)語(yǔ)法糖的好處就是import的時(shí)候,可以省去{}。

簡(jiǎn)單的說(shuō),如果import的時(shí)候,你發(fā)現(xiàn)某個(gè)變量沒(méi)有花括號(hào)括起來(lái)(沒(méi)有*號(hào)),那么你在腦海中應(yīng)該把它還原成有花括號(hào)的{default as ...}語(yǔ)法,所以import $,{each,map} from 'jquery';import后面第一個(gè)${default as $}的替代寫法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript框架設(shè)計(jì)之框架分類及主要功能

    javascript框架設(shè)計(jì)之框架分類及主要功能

    這篇文章主要介紹了javascript框架設(shè)計(jì)之框架分類及主要功能的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • JS小游戲之宇宙戰(zhàn)機(jī)源碼詳解

    JS小游戲之宇宙戰(zhàn)機(jī)源碼詳解

    這篇文章主要介紹了JS小游戲之宇宙戰(zhàn)機(jī)源碼,是一款非常經(jīng)典的游戲源碼,包含了游戲設(shè)計(jì)中比較常見(jiàn)的邏輯處理,本文附帶了該游戲的完整源碼,需要的朋友可以參考下
    2014-09-09
  • JavaScript基于ChatGPT實(shí)現(xiàn)打字機(jī)消息回復(fù)

    JavaScript基于ChatGPT實(shí)現(xiàn)打字機(jī)消息回復(fù)

    ChatGPT 是一個(gè)基于深度學(xué)習(xí)的大型語(yǔ)言模型,處理自然語(yǔ)言需要大量的計(jì)算資源和時(shí)間,響應(yīng)速度肯定比普通的讀數(shù)據(jù)庫(kù)要慢的多,本文介紹了ChatGPT打字機(jī)消息回復(fù)實(shí)現(xiàn)原理,感興趣的同學(xué)可以跟著小編一起學(xué)習(xí)
    2023-05-05
  • JS嵌套函數(shù)調(diào)用上下文的問(wèn)題解決

    JS嵌套函數(shù)調(diào)用上下文的問(wèn)題解決

    這篇文章主要探討了JS嵌套函數(shù)調(diào)用上下文的問(wèn)題,需要的朋友可以參考下
    2014-03-03
  • JS中IP地址與整數(shù)相互轉(zhuǎn)換的實(shí)現(xiàn)代碼

    JS中IP地址與整數(shù)相互轉(zhuǎn)換的實(shí)現(xiàn)代碼

    這篇文章主要介紹了JS中IP地址與整數(shù)相互轉(zhuǎn)換的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-04-04
  • 炫酷的js手風(fēng)琴效果

    炫酷的js手風(fēng)琴效果

    既然JQ和JS都能實(shí)現(xiàn)那么炫酷的效果,我們用CSS3能不能做出手風(fēng)琴效果的書簽來(lái)呢?這篇文章主要為大家分享了炫酷的手風(fēng)琴效果實(shí)現(xiàn)方式,感興趣的小伙伴們可以參考一下
    2016-10-10
  • TypeScript類型聲明書寫詳解

    TypeScript類型聲明書寫詳解

    這篇文章主要介紹了TypeScript類型聲明書寫詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 基于JS實(shí)現(xiàn)回到頁(yè)面頂部的五種寫法(從實(shí)現(xiàn)到增強(qiáng))

    基于JS實(shí)現(xiàn)回到頁(yè)面頂部的五種寫法(從實(shí)現(xiàn)到增強(qiáng))

    這篇文章主要介紹了基于JS實(shí)現(xiàn)回到頁(yè)面頂部的五種寫法(從實(shí)現(xiàn)到增強(qiáng))的相關(guān)資料,本文介紹的非常詳細(xì),實(shí)用性也非常高,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • MVVM框架下實(shí)現(xiàn)分頁(yè)功能示例

    MVVM框架下實(shí)現(xiàn)分頁(yè)功能示例

    分頁(yè)這種組件,幾乎每一種框架都有這樣的組件,這篇文章主要介紹了MVVM框架下實(shí)現(xiàn)分頁(yè)功能示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • javascript溫習(xí)的一些筆記 基礎(chǔ)常用知識(shí)小結(jié)

    javascript溫習(xí)的一些筆記 基礎(chǔ)常用知識(shí)小結(jié)

    在電腦上找到多年前的javascript的一些小筆記,因?yàn)橐獙⒐P記本上面的文件整理一下, 不用的刪除掉, 所以將此篇筆記再發(fā)布一下,存檔到自己的博客吧, 電腦上的文件就刪除了
    2011-06-06

最新評(píng)論

卢氏县| 英德市| 东辽县| 郓城县| 开阳县| 获嘉县| 瓦房店市| 沙湾县| 慈利县| 维西| 宝丰县| 策勒县| 枣庄市| 光泽县| 颍上县| 博罗县| 巴彦淖尔市| 卓资县| 博湖县| 牡丹江市| 苍山县| 绥中县| 新龙县| 施甸县| 万山特区| 岳普湖县| 吉安市| 锡林郭勒盟| 汝城县| 集贤县| 长子县| 新民市| 和田市| 金川县| 固阳县| 宁波市| 会理县| 镇赉县| 年辖:市辖区| 天峨县| 定远县|