1.Node.js全局对象global
在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。
注意: 最好不要使用 var 定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。
打开命令行,输入 node 回车,然后输入 this 或者global就可以看到全局对象。
2.模块的引入
使用require()加载模块文件,参数值是字符串,如非nodejs自有模块,需要指定模块文件的完整路径及文件名。可以使用相对路径./或绝对路径/。
//nodejs自有模块
const http = require("http");
const path = require("path");
const fs = require("fs");
//非nodejs自有模块
const scoreData=require('./score.json');
3.模块的导出
node中是模块作用域,默认文件中所有的成员只在当前文件模块有效
对于希望可以被其他模块访问的成员,我们就需要把这些公开的成员都挂载到exports接口对象中就可以导出多个成员
(1) 导出单个成员(函数,字符串)
//modules.exports = 值;
module.exports='hello';
(2) 导出多个成员(必须在对象中)
//exports.属性名 = 属性值;
exports.a = 123;
exports.b ='hello';
exports.c=function(){
console.log('ccc');
}
注意:exports 和 module.exports 的区别
(1)相同点:
在node中,每个模块中都有一个 module 对象,module 对象中有一个 exports 对象(默认是空对象),我们可以把需要导出的成员都挂载到 module.exports 接口对象中,也就是:moudle.exports.xxx = xxx 的方式,但是每次都 oudle.exports.xxx = xxx 很麻烦所以 Node 为了方便,同时在每一个模块中都提供了一个成员叫:exports
exports === module.exports 结果为 true
所以对于:moudle.exports.xxx = xxx 的方式 完全可以:expots.xxx = xxx
(2)不同点
当一个模块需要导出单个成员的时候,这个时候必须使用:module.exports = xxx 的方式
不要使用 exports = xxx, 因为这样不管用
因为 每个模块最终向外return的是module.exports
而 exports 只是 module.exports 的一个引用
所以即便为 exports = xx 重新赋值,也不会影响 module.exports
但是有一种赋值方式比较特殊:exports = module.exports 这个用来重新建立引用关系的,而和之前的 exports 就没有关系了