简单看个代码验证下:
//在test.js中给global添加一个属性a,值为4;
global.a = 4;
//新建一个文件引入test.js
require('./test')
console.log(global)
打印结果,可以看到属性被挂载在了global上,并能被访问到。
刚才提到global是全局对象,那单个模块的顶级对象是什么,没错,就是module;module包含了当前模块的所有信息,而module.exports指的是当前文档所暴露的内容。
//打印下this
console.log(this === module.exports)//true
这里打印结果是true,this指向了模块的exports,而不是整个模块,姑且理解为方便与其他模块交互吧,刨除其他无关信息,只指向出口。(个人理解)
在模块中,模块内部的变量只能在当前模块使用,只有通过module.exports暴露出去后其他模块才可以使用。
结论:对于单个模块顶级对象是module,模块内的属性想要被其他模块访问,需要使用module.exports暴露。
不再赘述
function xx() {
console.log(this) //global
}
xx()
函数中的this指向了global,但是函数并不可以全局调用,很奇怪,不晓得为撒。
//a文件声明函数b
function b() {
console.log(123)
}
//b文件调用函数,报错
b()
不再赘述
因篇幅问题不能全部显示,请点此查看更多更全内容