亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
javascript中的require、import與export
首頁 web前端 前端問答 require是es6語法嗎

require是es6語法嗎

Oct 21, 2022 pm 04:09 PM
javascript es6

不是,require是CommonJS規(guī)范的模塊化語法;而es6規(guī)范的模塊化語法是import。require是運(yùn)行時加載,import是編譯時加載;require可以寫在代碼的任意位置,import只能寫在文件的最頂端且不可在條件語句或函數(shù)作用域中使用;require運(yùn)行時才引入模塊的屬性所以性能相對較低,import編譯時引入模塊的屬性所所以性能稍高。

require是es6語法嗎

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

require是CommonJS規(guī)范的模塊化語法;而es6規(guī)范的模塊化語法是import。

CommonJS介紹

CommonJS實(shí)現(xiàn)了Javascript的模塊化規(guī)范,規(guī)范了模塊的特性和各模塊之間的相互依賴性,使得代碼可以更好的編寫和維護(hù),同時提高了代碼的復(fù)用性。定義每個文件都是一個模塊(module變量代表當(dāng)前模塊)并有自己的作用域,而每個文件里面定義的變量、函數(shù)、類,都是私有的,對于其他模塊是不可見。模塊的exports屬性是對外的接口,只有通過exports導(dǎo)出的屬性才能被加載識別。Node就是基于CommonJs規(guī)范實(shí)現(xiàn)的,因?yàn)镃ommonJS規(guī)范加載模塊是同步的,而服務(wù)器中的Node模塊都直接存儲在服務(wù)器本地硬盤中的,加載起來自然比較快,可以說node項(xiàng)目是CommonJs規(guī)范目前的最好實(shí)踐應(yīng)用。

ECMAScript 6 (簡稱ES6)

ECMAScript是(European Computer Manufacturers Association Script)的縮寫,它是由ECMA國際標(biāo)準(zhǔn)化定制的一項(xiàng)JavaScript腳本語言的標(biāo)準(zhǔn)化規(guī)范。ECMAScript 6 是ECMA在2015年發(fā)布的JavaScript 的規(guī)范標(biāo)準(zhǔn),解決 ES5 的很多先天不足并引入了模塊化思想。ES6模塊的設(shè)計(jì)思想是盡量的靜態(tài)化,使得編譯時就能確定模塊的依賴關(guān)系以及輸入和輸出的變量。

require與import的區(qū)別

1,require是運(yùn)行時加載,import是編譯時加載;

2,require可以寫在代碼的任意位置,import只能寫在文件的最頂端且不可在條件語句或函數(shù)作用域中使用;

3,require通過module.exports導(dǎo)出的值就不能再變化,import通過export導(dǎo)出的值可以改變;

4;require通過module.exports導(dǎo)出的是exports對象,import通過export導(dǎo)出是指定輸出的代碼;

5,require運(yùn)行時才引入模塊的屬性所以性能相對較低,import編譯時引入模塊的屬性所所以性能稍高。

javascript中的require、import與export

理想情況下,開發(fā)者只需要實(shí)現(xiàn)核心的業(yè)務(wù)邏輯,其他都可以加載別人已經(jīng)寫好的模塊。

但是,Javascript不是一種模塊化編程語言,在es6以前,它是不支持”類”(class),所以也就沒有”模塊”(module)了。

require時代

Javascript社區(qū)做了很多努力,在現(xiàn)有的運(yùn)行環(huán)境中,實(shí)現(xiàn)”模塊”的效果。

原始寫法

模塊就是實(shí)現(xiàn)特定功能的一組方法。
只要把不同的函數(shù)(以及記錄狀態(tài)的變量)簡單地放在一起,就算是一個模塊。

function m1(){
 //...
}
function m2(){
 //...  
}

上面的函數(shù)m1()m2() ,組成一個模塊。使用的時候,直接調(diào)用就行了。

這種做法的缺點(diǎn)很明顯:”污染”了全局變量,無法保證不與其他模塊發(fā)生變量名沖突,而且模塊成員之間看不出直接關(guān)系。

對象寫法

為了解決上面的缺點(diǎn),可以把模塊寫成一個對象,所有的模塊成員都放到這個對象里面

var module1 = new Object({
_count : 0,
 m1 : function (){
  //...
 },
 m2 : function (){
  //...
 }
});

上面的函數(shù)m1()m2() ,都封裝在module1對象里。使用的時候,就是調(diào)用這個對象的屬性

module1.m1();

這樣的寫法會暴露所有模塊成員,內(nèi)部狀態(tài)可以被外部改寫。比如,外部代碼可以直接改變內(nèi)部計(jì)數(shù)器的值。

module._count = 1;

立即執(zhí)行函數(shù)寫法

使用”立即執(zhí)行函數(shù)”(Immediately-Invoked Function Expression,IIFE),可以達(dá)到不暴露私有成員的目的

var module = (function() {
var _count = 0;
var m1 = function() {
alert(_count)
}
var m2 = function() {
alert(_count + 1)
}
 
return {
m1: m1,
m2: m2
}
})()

使用上面的寫法,外部代碼無法讀取內(nèi)部的_count變量。

  console.info(module._count); //undefined

module就是Javascript模塊的基本寫法。

主流模塊規(guī)范

在es6以前,還沒有提出一套官方的規(guī)范,從社區(qū)和框架推廣程度而言,目前通行的javascript模塊規(guī)范有兩種:CommonJS 和 AMD

CommonJS規(guī)范

2009年,美國程序員Ryan Dahl創(chuàng)造了node.js項(xiàng)目,將javascript語言用于服務(wù)器端編程。

這標(biāo)志”Javascript模塊化編程”正式誕生。前端的復(fù)雜程度有限,沒有模塊也是可以的,但是在服務(wù)器端,一定要有模塊,與操作系統(tǒng)和其他應(yīng)用程序互動,否則根本沒法編程。

node編程中最重要的思想之一就是模塊,而正是這個思想,讓JavaScript的大規(guī)模工程成為可能。模塊化編程在js界流行,也是基于此,隨后在瀏覽器端,requirejs和seajs之類的工具包也出現(xiàn)了,可以說在對應(yīng)規(guī)范下,require統(tǒng)治了ES6之前的所有模塊化編程,即使現(xiàn)在,在ES6 module被完全實(shí)現(xiàn)之前,還是這樣。

在CommonJS中,暴露模塊使用module.exports和exports,很多人不明白暴露對象為什么會有兩個,后面會介紹區(qū)別

在CommonJS中,有一個全局性方法require() ,用于加載模塊。假定有一個數(shù)學(xué)模塊math.js,就可以像下面這樣加載。

var math = require('math');

然后,就可以調(diào)用模塊提供的方法:

 var math = require('math');
 math.add(2,3); // 5

正是由于CommonJS 使用的require方式的推動,才有了后面的AMD、CMD 也采用的require方式來引用模塊的風(fēng)格

AMD規(guī)范

有了服務(wù)器端模塊以后,很自然地,大家就想要客戶端模塊。而且最好兩者能夠兼容,一個模塊不用修改,在服務(wù)器和瀏覽器都可以運(yùn)行。

但是,由于一個重大的局限,使得CommonJS規(guī)范不適用于瀏覽器環(huán)境。還是上一節(jié)的代碼,如果在瀏覽器中運(yùn)行,會有一個很大的問題

var math = require('math');
math.add(2, 3);

第二行math.add(2, 3) ,在第一行require(‘math')之后運(yùn)行,因此必須等math.js加載完成。也就是說,如果加載時間很長,整個應(yīng)用就會停在那里等。

這對服務(wù)器端不是一個問題,因?yàn)樗械哪K都存放在本地硬盤,可以同步加載完成,等待時間就是硬盤的讀取時間。但是,對于瀏覽器,這卻是一個大問題,因?yàn)槟K都放在服務(wù)器端,等待時間取決于網(wǎng)速的快慢,可能要等很長時間,瀏覽器處于”假死”狀態(tài)。

因此,瀏覽器端的模塊,不能采用”同步加載”(synchronous),只能采用”異步加載”(asynchronous)。這就是AMD規(guī)范誕生的背景。

AMD是”Asynchronous Module Definition”的縮寫,意思就是”異步模塊定義”。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行。所有依賴這個模塊的語句,都定義在一個回調(diào)函數(shù)中,等到加載完成之后,這個回調(diào)函數(shù)才會運(yùn)行。

模塊必須采用特定的define()函數(shù)來定義。

define(id?, dependencies?, factory)
  • id:字符串,模塊名稱(可選)
  • dependencies: 是我們要載入的依賴模塊(可選),使用相對路徑。,注意是數(shù)組格式
  • factory: 工廠方法,返回一個模塊函數(shù)

如果一個模塊不依賴其他模塊,那么可以直接定義在define()函數(shù)之中。

// math.js
  define(function (){
    var add = function (x,y){
      return x+y;
    };
    return {
      add: add
    };
  });

如果這個模塊還依賴其他模塊,那么define()函數(shù)的第一個參數(shù),必須是一個數(shù)組,指明該模塊的依賴性。

define(['Lib'], function(Lib){
    function foo(){
      Lib.doSomething();
    }
    return {
      foo : foo
    };
  });

當(dāng)require()函數(shù)加載上面這個模塊的時候,就會先加載Lib.js文件。

AMD也采用require()語句加載模塊,但是不同于CommonJS,它要求兩個參數(shù):

require([module], callback);

第一個參數(shù)[module],是一個數(shù)組,里面的成員就是要加載的模塊;第二個參數(shù)callback,則是加載成功之后的回調(diào)函數(shù)。如果將前面的代碼改寫成AMD形式,就是下面這樣:

require(['math'], function (math) {
 math.add(2, 3);
});

math.add()與math模塊加載不是同步的,瀏覽器不會發(fā)生假死。所以很顯然,AMD比較適合瀏覽器環(huán)境。

目前,主要有兩個Javascript庫實(shí)現(xiàn)了AMD規(guī)范:require.js和curl.js。

CMD規(guī)范

CMD (Common Module Definition), 是seajs推崇的規(guī)范,CMD則是依賴就近,用的時候再require。它寫起來是這樣的:

define(function(require, exports, module) {
var clock = require('clock');
clock.start();
});

CMD與AMD一樣,也是采用特定的define()函數(shù)來定義,用require方式來引用模塊

define(id?, dependencies?, factory)
  • id:字符串,模塊名稱(可選)
  • dependencies: 是我們要載入的依賴模塊(可選),使用相對路徑。,注意是數(shù)組格式
  • factory: 工廠方法,返回一個模塊函數(shù)
define('hello', ['jquery'], function(require, exports, module) {
 
// 模塊代碼
 
});

如果一個模塊不依賴其他模塊,那么可以直接定義在define()函數(shù)之中。

define(function(require, exports, module) {
// 模塊代碼
});

注意:帶 id 和 dependencies 參數(shù)的 define 用法不屬于 CMD 規(guī)范,而屬于 Modules/Transport 規(guī)范。

CMD與AMD區(qū)別

AMD和CMD最大的區(qū)別是對依賴模塊的執(zhí)行時機(jī)處理不同,而不是加載的時機(jī)或者方式不同,二者皆為異步加載模塊。

AMD依賴前置,js可以方便知道依賴模塊是誰,立即加載;

而CMD就近依賴,需要使用把模塊變?yōu)樽址馕鲆槐椴胖酪蕾嚵四切┠K,這也是很多人詬病CMD的一點(diǎn),犧牲性能來帶來開發(fā)的便利性,實(shí)際上解析模塊用的時間短到可以忽略。

現(xiàn)階段的標(biāo)準(zhǔn)

ES6標(biāo)準(zhǔn)發(fā)布后,module成為標(biāo)準(zhǔn),標(biāo)準(zhǔn)使用是以export指令導(dǎo)出接口,以import引入模塊,但是在我們一貫的node模塊中,我們依然采用的是CommonJS規(guī)范,使用require引入模塊,使用module.exports導(dǎo)出接口。

export導(dǎo)出模塊

export語法聲明用于導(dǎo)出函數(shù)、對象、指定文件(或模塊)的原始值。

注意:在node中使用的是exports,不要混淆了

export有兩種模塊導(dǎo)出方式:命名式導(dǎo)出(名稱導(dǎo)出)和默認(rèn)導(dǎo)出(定義式導(dǎo)出),命名式導(dǎo)出每個模塊可以多個,而默認(rèn)導(dǎo)出每個模塊僅一個。

export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const
 
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };
 
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
  • name1… nameN-導(dǎo)出的“標(biāo)識符”。導(dǎo)出后,可以通過這個“標(biāo)識符”在另一個模塊中使用import引用
  • default-設(shè)置模塊的默認(rèn)導(dǎo)出。設(shè)置后import不通過“標(biāo)識符”而直接引用默認(rèn)導(dǎo)入
  • -繼承模塊并導(dǎo)出繼承模塊所有的方法和屬性
  • as-重命名導(dǎo)出“標(biāo)識符”
  • from-從已經(jīng)存在的模塊、腳本文件…導(dǎo)出

命名式導(dǎo)出

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

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

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

export * from 'article';

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

var name = 'IT筆錄';
var domain = 'http://itbilu.com';
 
export {name, domain}; // 相當(dāng)于導(dǎo)出
{name:name,domain:domain}

模塊導(dǎo)出時,我們可以使用as關(guān)鍵字對導(dǎo)出成員進(jìn)行重命名:

var name = 'IT筆錄';
var domain = 'http://itbilu.com';
 
export {name as siteName, domain};

注意:下面的語法有嚴(yán)重錯誤的情況:

// 錯誤演示
export 1; // 絕對不可以
 
var a = 100;
export a;

export在導(dǎo)出接口的時候,必須與模塊內(nèi)部的變量具有一一對應(yīng)的關(guān)系。直接導(dǎo)出1沒有任何意義,也不可能在import的時候有一個變量與之對應(yīng)

export a雖然看上去成立,但是a的值是一個數(shù)字,根本無法完成解構(gòu),因此必須寫成export {a}的形式。即使a被賦值為一個function,也是不允許的。而且,大部分風(fēng)格都建議,模塊中最好在末尾用一個export導(dǎo)出所有的接口,例如:

export {fun as default,a,b,c};

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

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

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

命名式導(dǎo)出與默認(rèn)導(dǎo)出

默認(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 };

export使用示例

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

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

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

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

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

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

在另一個模塊(腳本文件)中,我們可以像下面這樣引用,相對名稱導(dǎo)出來說使用更為簡單:

// 引用 "my-module.js"模塊
import cube from 'my-module';
console.log(cube(3)); // 27

import引入模塊

import語法聲明用于從已導(dǎo)出的模塊、腳本中導(dǎo)入函數(shù)、對象、指定文件(或模塊)的原始值。

import模塊導(dǎo)入與export模塊導(dǎo)出功能相對應(yīng),也存在兩種模塊導(dǎo)入方式:命名式導(dǎo)入(名稱導(dǎo)入)和默認(rèn)導(dǎo)入(定義式導(dǎo)入)。

import的語法跟require不同,而且import必須放在文件的最開始,且前面不允許有其他邏輯代碼,這和其他所有編程語言風(fēng)格一致。

import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";
  • name-從將要導(dǎo)入模塊中收到的導(dǎo)出值的名稱
  • member, memberN-從導(dǎo)出模塊,導(dǎo)入指定名稱的多個成員
  • defaultMember-從導(dǎo)出模塊,導(dǎo)入默認(rèn)導(dǎo)出成員
  • alias, aliasN-別名,對指定導(dǎo)入成員進(jìn)行的重命名
  • module-name-要導(dǎo)入的模塊。是一個文件名
  • as-重命名導(dǎo)入成員名稱(“標(biāo)識符”)
  • from-從已經(jīng)存在的模塊、腳本文件等導(dǎo)入

命名式導(dǎo)入

我們可以通過指定名稱,就是將這些成員插入到當(dāng)作用域中。導(dǎo)出時,可以導(dǎo)入單個成員或多個成員:

注意:花括號里面的變量與export后面的變量一一對應(yīng)

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

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

import * as myModule from "my-module";

導(dǎo)入模塊對象時,也可以使用as對導(dǎo)入成員重命名,以方便在當(dāng)前模塊內(nèi)使用:

import {reallyReallyLongModuleMemberName as shortName} from "my-module";

導(dǎo)入多個成員時,同樣可以使用別名:

import {reallyReallyLongModuleMemberName as shortName, anotherLongModuleName as short} from "my-module";

導(dǎo)入一個模塊,但不進(jìn)行任何綁定:

import "my-module";

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

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

直接導(dǎo)入默認(rèn)值:

import myDefault from "my-module";

也可以在命名空間導(dǎo)入和名稱導(dǎo)入中,同時使用默認(rèn)導(dǎo)入:

import myDefault, * as myModule from "my-module"; // myModule 做為命名空間使用

import myDefault, {foo, bar} from "my-module"; // 指定成員導(dǎo)入

import使用示例

// --file.js--
function getJSON(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onload = function () {
callback(this.responseText)
};
xhr.open("GET", url, true);
xhr.send();
}
 
export function getUsefulContents(url, callback) {
getJSON(url, data => callback(JSON.parse(data)));
}
 
// --main.js--
import { getUsefulContents } from "file";
getUsefulContents("http://itbilu.com", data => {
doSomethingUseful(data);
});

default關(guān)鍵字

// d.js
export default function() {}
 
// 等效于:
function a() {};
export {a as default};

在import的時候,可以這樣用:

import a from './d';
 
// 等效于,或者說就是下面這種寫法的簡寫,是同一個意思
import {default as a} from './d';

這個語法糖的好處就是import的時候,可以省去花括號{}。

簡單的說,如果import的時候,你發(fā)現(xiàn)某個變量沒有花括號括起來(沒有*號),那么你在腦海中應(yīng)該把它還原成有花括號的as語法。

所以,下面這種寫法你也應(yīng)該理解了吧:

import $,{each,map} from 'jquery';

import后面第一個$是{defalut as $}的替代寫法。

as關(guān)鍵字

as簡單的說就是取一個別名,export中可以用,import中其實(shí)可以用:

// a.js
var a = function() {};
export {a as fun};
 
// b.js
import {fun as a} from './a';
a();

上面這段代碼,export的時候,對外提供的接口是fun,它是a.js內(nèi)部a這個函數(shù)的別名,但是在模塊外面,認(rèn)不到a,只能認(rèn)到fun。

import中的as就很簡單,就是你在使用模塊里面的方法的時候,給這個方法取一個別名,好在當(dāng)前的文件里面使用。之所以是這樣,是因?yàn)橛械臅r候不同的兩個模塊可能通過相同的接口,比如有一個c.js也通過了fun這個接口:

// c.js
export function fun() {};

如果在b.js中同時使用a和c這兩個模塊,就必須想辦法解決接口重名的問題,as就解決了。

CommonJS中module.exports 與 exports的區(qū)別

Module.exports

The module.exports object is created by the Module system. Sometimes this is not acceptable; many want their module to be an instance of some class. To do this, assign the desired export object to module.exports. Note that assigning the desired object to exports will simply rebind the local exports variable, which is probably not what you want to do.

譯文:module.exports對象是由模塊系統(tǒng)創(chuàng)建的。 有時這是難以接受的;許多人希望他們的模塊成為某個類的實(shí)例。 為了實(shí)現(xiàn)這個,需要將期望導(dǎo)出的對象賦值給module.exports。 注意,將期望的對象賦值給exports會簡單地重新綁定到本地exports變量上,這可能不是你想要的。

Module.exports

The exports variable is available within a module's file-level scope, and is assigned the value of module.exports before the module is evaluated. It allows a shortcut, so that module.exports.f = … can be written more succinctly as exports.f = …. However, be aware that like any variable, if a new value is assigned to exports, it is no longer bound to module.exports:

譯文:exports變量是在模塊的文件級別作用域內(nèi)有效的,它在模塊被執(zhí)行前被賦于 module.exports 的值。它有一個快捷方式,以便 module.exports.f = … 可以被更簡潔地寫成exports.f = … 。 注意,就像任何變量,如果一個新的值被賦值給exports,它就不再綁定到module.exports(其實(shí)是exports.屬性會自動掛載到?jīng)]有命名沖突的module.exports.屬性)

從Api文檔上面的可以看出,從require導(dǎo)入方式去理解,關(guān)鍵有兩個變量(全局變量module.exports,局部變量exports)、一個返回值(module.exports)

function require(...) {
var module = { exports: {} };
((module, exports) => {
// 你的被引入代碼 Start
// var exports = module.exports = {}; (默認(rèn)都有的)
function some_func() {};
exports = some_func;
// 此時,exports不再掛載到module.exports,
// export將導(dǎo)出{}默認(rèn)對象
module.exports = some_func;
// 此時,這個模塊將導(dǎo)出some_func對象,覆蓋exports上的some_func
// 你的被引入代碼 End
})(module, module.exports);
// 不管是exports還是module.exports,最后返回的還是module.exports
return module.exports;
}

demo.js:

console.log(exports); // {}
console.log(module.exports); // {}
console.log(exports === module.exports); // true
console.log(exports == module.exports); // true
console.log(module);
/**
Module {
id: '.',
exports: {},
parent: null,
filename: '/Users/larben/Desktop/demo.js',
loaded: false,
children: [],
paths:
[ '/Users/larben/Desktop/node_modules',
'/Users/larben/node_modules',
'/Users/node_modules',
'/node_modules' ] }
*/

注意

每個js文件一創(chuàng)建,都有一個var exports = module.exports = {} , 使exports和module.exports都指向一個空對象。

module.exports和exports所指向的內(nèi)存地址相同

【相關(guān)推薦:javascript視頻教程、編程視頻

以上是require是es6語法嗎的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

WebSocket與JavaScript:實(shí)現(xiàn)實(shí)時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù) WebSocket與JavaScript:實(shí)現(xiàn)實(shí)時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù) Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實(shí)現(xiàn)實(shí)時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)引言:隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,實(shí)時監(jiān)控系統(tǒng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。而實(shí)現(xiàn)實(shí)時監(jiān)控的關(guān)鍵技術(shù)之一就是WebSocket與JavaScript的結(jié)合使用。本文將介紹WebSocket與JavaScript在實(shí)時監(jiān)控系統(tǒng)中的應(yīng)用,并給出代碼示例,詳細(xì)解釋其實(shí)現(xiàn)原理。一、WebSocket技

如何使用WebSocket和JavaScript實(shí)現(xiàn)在線語音識別系統(tǒng) 如何使用WebSocket和JavaScript實(shí)現(xiàn)在線語音識別系統(tǒng) Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實(shí)現(xiàn)在線語音識別系統(tǒng)引言:隨著科技的不斷發(fā)展,語音識別技術(shù)已經(jīng)成為了人工智能領(lǐng)域的重要組成部分。而基于WebSocket和JavaScript實(shí)現(xiàn)的在線語音識別系統(tǒng),具備了低延遲、實(shí)時性和跨平臺的特點(diǎn),成為了一種被廣泛應(yīng)用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實(shí)現(xiàn)在線語音識別系

如何利用JavaScript和WebSocket實(shí)現(xiàn)實(shí)時在線點(diǎn)餐系統(tǒng) 如何利用JavaScript和WebSocket實(shí)現(xiàn)實(shí)時在線點(diǎn)餐系統(tǒng) Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實(shí)現(xiàn)實(shí)時在線點(diǎn)餐系統(tǒng)介紹:隨著互聯(lián)網(wǎng)的普及和技術(shù)的進(jìn)步,越來越多的餐廳開始提供在線點(diǎn)餐服務(wù)。為了實(shí)現(xiàn)實(shí)時在線點(diǎn)餐系統(tǒng),我們可以利用JavaScript和WebSocket技術(shù)。WebSocket是一種基于TCP協(xié)議的全雙工通信協(xié)議,可以實(shí)現(xiàn)客戶端與服務(wù)器的實(shí)時雙向通信。在實(shí)時在線點(diǎn)餐系統(tǒng)中,當(dāng)用戶選擇菜品并下單

JavaScript和WebSocket:打造高效的實(shí)時天氣預(yù)報(bào)系統(tǒng) JavaScript和WebSocket:打造高效的實(shí)時天氣預(yù)報(bào)系統(tǒng) Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的實(shí)時天氣預(yù)報(bào)系統(tǒng)引言:如今,天氣預(yù)報(bào)的準(zhǔn)確性對于日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以通過實(shí)時獲取天氣數(shù)據(jù)來提供更準(zhǔn)確可靠的天氣預(yù)報(bào)。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來構(gòu)建一個高效的實(shí)時天氣預(yù)報(bào)系統(tǒng)。本文將通過具體的代碼示例來展示實(shí)現(xiàn)的過程。We

如何使用WebSocket和JavaScript實(shí)現(xiàn)在線預(yù)約系統(tǒng) 如何使用WebSocket和JavaScript實(shí)現(xiàn)在線預(yù)約系統(tǒng) Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實(shí)現(xiàn)在線預(yù)約系統(tǒng)在當(dāng)今數(shù)字化的時代,越來越多的業(yè)務(wù)和服務(wù)都需要提供在線預(yù)約功能。而實(shí)現(xiàn)一個高效、實(shí)時的在線預(yù)約系統(tǒng)是至關(guān)重要的。本文將介紹如何使用WebSocket和JavaScript來實(shí)現(xiàn)一個在線預(yù)約系統(tǒng),并提供具體的代碼示例。一、什么是WebSocketWebSocket是一種在單個TCP連接上進(jìn)行全雙工

簡易JavaScript教程:獲取HTTP狀態(tài)碼的方法 簡易JavaScript教程:獲取HTTP狀態(tài)碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何獲取HTTP狀態(tài)碼,需要具體代碼示例前言:在Web開發(fā)中,經(jīng)常會涉及到與服務(wù)器進(jìn)行數(shù)據(jù)交互的場景。在與服務(wù)器進(jìn)行通信時,我們經(jīng)常需要獲取返回的HTTP狀態(tài)碼來判斷操作是否成功,根據(jù)不同的狀態(tài)碼來進(jìn)行相應(yīng)的處理。本篇文章將教你如何使用JavaScript獲取HTTP狀態(tài)碼,并提供一些實(shí)用的代碼示例。使用XMLHttpRequest

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用于在DOM樹中插入一個新的節(jié)點(diǎn)。這個方法需要兩個參數(shù):要插入的新節(jié)點(diǎn)和參考節(jié)點(diǎn)(即新節(jié)點(diǎn)將要被插入的位置的節(jié)點(diǎn))。

如何在JavaScript中獲取HTTP狀態(tài)碼的簡單方法 如何在JavaScript中獲取HTTP狀態(tài)碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態(tài)碼獲取方法簡介:在進(jìn)行前端開發(fā)中,我們常常需要處理與后端接口的交互,而HTTP狀態(tài)碼就是其中非常重要的一部分。了解和獲取HTTP狀態(tài)碼有助于我們更好地處理接口返回的數(shù)據(jù)。本文將介紹使用JavaScript獲取HTTP狀態(tài)碼的方法,并提供具體代碼示例。一、什么是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向服務(wù)器發(fā)起請求時,服務(wù)

See all articles