里面怎么使用import引用_谈谈模块化的 require 和 import
生活随笔
收集整理的這篇文章主要介紹了
里面怎么使用import引用_谈谈模块化的 require 和 import
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、區別
二、require和import會不會循環引用?
答案是不會,因為模塊執行后會把導出的值緩存,下次再require或者import不會再次執行。這樣也就不會循環引用了。比如a引入了b,b引入了a,如果a再次執行那么會再引入b,那就循環起來了,但實際上會做緩存,再次引入不會再執行。可以通過require.cache來查看緩存的模塊,key為require.resolve(path)的結果。
三、模塊中有定時器改變了導出的值,導出的值會不會變?
// a.js let a = 1 setTimeout(() => {a = 2 }, 1000) module.exports = a// test.js const a = require('./a') setTimeout(() => {console.log(a) }, 2000)// a2.js let a = 1 setTimeout(() => {a = 2 }, 1000) export {a }// test2.js import { a } from './a2'setTimeout(() => {console.log(a) }, 2000)結果是import引入的值是2,而require引入的值一直是1,這也是require和imort很重要的一個區別,es module的export導出的值會靜態的綁定,而commonjs exports導出的值是一個對象,會復制一份。這樣也就出現了這樣的現象。
四、總結
問 require和import的區別就是問commonjs和es module的區別,這兩者一個是api的規范,一個是語言的語法,所以后者可以做靜態分析,基于這個實現treeshaking,同時es module會靜態的綁定導出的值,而commonjs會復制一份。但兩者都會做緩存,所以不會有循環引用問題。
總結
以上是生活随笔為你收集整理的里面怎么使用import引用_谈谈模块化的 require 和 import的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python火爆的原因_为什么Pytho
- 下一篇: 基础练习 Sine之舞 (递推)