export的值引用問題?

時間 2021-05-31 17:25:55

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,...