-
Notifications
You must be signed in to change notification settings - Fork 0
commonjs 循环 import #17
Copy link
Copy link
Open
Description
commonjs 在 require 时会先执行引入的模块,所以循环引用时:被引入文件再引入原文件的时候,只引入了 require 语句之前那部分。
// a.js
let { b } = require('./b')
let a = 'a'
exports.a = a
console.log('in a:', a, b)
setTimeout(() => {
console.log('in a timeout:', a, b)
})
//b.js
let { a } = require('./a')
let b = 'b'
exports.b = b
console.log('in b:', a, b)
setTimeout(() => {
console.log('in b timeout:', a, b)
})node a输出:
in b: undefined b
in a: a b
in b timeout: undefined b
in a timeout: a b直接 require 变量,在该模块内,该变量不会变,类似闭包。
但是 require 整个包的话,包可以作为引用:
// a.js
let moduleB = require('./b')
let a = 'a'
exports.a = a
console.log('in a:', a, moduleB.b)
setTimeout(() => {
console.log('in a timeout:', a, moduleB.b)
})
// b.js
let moduleA = require('./a')
let b = 'b'
exports.b = b
console.log('in b:', moduleA.a, b)
setTimeout(() => {
console.log('in b timeout:', moduleA.a, b)
})node a 输出:
in b: undefined b
in a: a b
- in b timeout: undefined b
+ in b timeout: a b
in a timeout: a bReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels