Node.js中全局对象global,module及this指向的一些理解

文章目录

  • global的理解
  • module的理解
  • this指向
    • 1.模块内的this--指向module.exports
    • 2.函数内的this--指向global
    • 3.构造函数内的this--指向他的实例

global的理解

global既nodejs的全局对象,他的属性和方法在所有模块中都可用;setInterval setTimeout都属于global的属性

简单看个代码验证下:

//在test.js中给global添加一个属性a,值为4;
global.a = 4;
//新建一个文件引入test.js
require('./test')
console.log(global)

打印结果,可以看到属性被挂载在了global上,并能被访问到。
Node.js中全局对象global,module及this指向的一些理解_第1张图片
结论:global是全局属性,凌驾于单独的模块之上,他的属性各个模块都可以访问到,不需要使用module.exports暴露

module的理解

刚才提到global是全局对象,那单个模块的顶级对象是什么,没错,就是module;module包含了当前模块的所有信息,而module.exports指的是当前文档所暴露的内容。
Node.js中全局对象global,module及this指向的一些理解_第2张图片

//打印下this
console.log(this === module.exports)//true

这里打印结果是true,this指向了模块的exports,而不是整个模块,姑且理解为方便与其他模块交互吧,刨除其他无关信息,只指向出口。(个人理解)

在模块中,模块内部的变量只能在当前模块使用,只有通过module.exports暴露出去后其他模块才可以使用。

结论:对于单个模块顶级对象是module,模块内的属性想要被其他模块访问,需要使用module.exports暴露。

this指向

1.模块内的this–指向module.exports

不再赘述

2.函数内的this–指向global

function xx() {
    console.log(this) //global
}
xx()

函数中的this指向了global,但是函数并不可以全局调用,很奇怪,不晓得为撒。

//a文件声明函数b
function b() {
    console.log(123)
}
//b文件调用函数,报错
b()

3.构造函数内的this–指向他的实例

不再赘述

你可能感兴趣的:(JS进阶之路,node.js,javascript,前端)