1樓:joker
用babel轉換一下就知道了。
import
from
'./test'
;console
.log(i
);// output 1
inc();
console
.log(i
);// output 2
function
func()=
require
('./test'
)console
.log(i
);// output 1
inc();
console
.log(i
);// output 1
}轉換後
'use strict'
;var
_test
=require
('./test'
);console
.log
(_test.i
);// output 1(0
,_test
.inc
)();
console
.log
(_test.i
);// output 2
function
func()
2樓:凱斯
ES6模組對引入的變數是動態唯讀引用。動態指的是在變數在a模組發生了變化,在b模組也會發生變化。唯讀是指不能夠改變引入變數的值,不管是什麼資料型別
CommonJS exports出去的永遠是module物件。在語法中可以使用exports 或者module.exports來輸出某個模組的內容,因為exports是module.
exports的縮寫形式,即 exports === module.exports // true。而module.
exports預設情況下是乙個空物件,物件間的賦值實質上仍然指向同乙個物件。也就是說,exports和module.exports指向的是同乙個物件的記憶體位址。
在使用exports時要注意不能夠輸出乙個物件,如exports這樣會改變exports的指向,指向了另外乙個記憶體位址,跟modules.exports就沒有關係了。所以在require的時候就引用不到exports出來的物件的內容,而是預設的空物件,即module.
exports。
而CommonJS模組對引入的變數分兩種,對於基本資料型別,屬於複製整個變數。對於複雜資料型別,屬於淺拷貝,也就是兩個模組會指向同乙個變數
而ES6模組和CommonJS模組有乙個共同點就是,當引入的是乙個複雜資料型別的時候,可以給複雜資料型別(如物件)新增屬性和方法,因為它們仍然指向同乙個物件
但是不能夠指向另乙個物件,這在ES6模組中會報錯,而在CommonJS模組中就不會
ES6模組的機制有點型別於const變數
詳細的可以看看這兩篇文章
傳送門ECMAScript 6入門
commonjs模組和es6模組的區別 - unclekeith - 部落格園
3樓:troy351
如賀老所說。
es module匯出的是引用,多次引用的物件是同乙個commonjs匯出的是拷貝,多次引用的物件不是同乙個這是乙個feature
4樓:賀師俊
commonjs 的 exports 是乙個普通物件,其上的屬性只是值或引用的複製。而 es module 的 export/import 建立的是 binding。這是本質的不同。
另外應盡量避免用 commonjs 的 require 去載入乙個 es module,因為語義上的差別(同步非同步、預設匯出等)比較麻煩。
C 模板右值引用推導的問題?
情況是這樣的 int i 10 foo i 首先進行 name lookup 找到了 2 個 foo,然後進行模板引數的歸約.第 1 個是 foo T with T int 第 2 個是 foo const T with T int 之後進行過載決議,優先順序從 完美匹配 型別提公升 型別轉換 依次...
C 函式返回常引用給常引用初始化的問題,大家可不可以幫幫我?
黃亮anthony std string get std string t return t 就能滿足這裡的要求。謹慎所有返回引用函式 記憶體塊生命週期 不說人話 字串字面值隱式構造了string物件,get的引數引用了該string物件。但是該物件產生於get函式執行週期內,且由該週期內的棧持有,...
MATLAB中矩陣(向量)互相引用的問題?
如果a是行向量 或列向量 且b是向量,那麼a b 書就是行向量 或列向量 這個沒有為什麼,可以認為是規定 第二個你說的正態分佈曲線應該是概率密度函式曲線吧,你可以估計出引數之後繪圖 X randn 1001,1 mu mean X sigma std X x linspace mu 3 sigma,...