Node模块化概念

每个js文件都独立运行在一个闭包中

在Node中,每个js文件都独立运行在一个闭包中,不是全局的作用域,模块与模块无法互相访问。
目的是:全局变量私有化,避免全局污染

	//将暴露给外部的变量或者方法设置为exports属性
	exports.sum = (...numbers) => {
		let result = 0;
		numbers.forEach((item) => {
			resulet += item;
		});
		return result;
	}

	//在其他文件中通过require引入模块
	let func = require("./sum.js");
	func.sum(1, 2, 3);
	//核心模块直接写名称,外部文件模块加路径	./ 当前 ../上级

exports和require是函数参数

exportsrequire 是函数参数,不是全局对象。
在node的全局对象是global,和window类似
判读函数的标识:arguments
获取函数本身 arguments.callee

    Console.log(arguments.callee + ""); //转义成字符串
    	输出:function (exports, require,module,__filename,__dirname){}

exports 和 module.exports的区别

exports === modu'le.exports
exports只能使用.语法来向外暴露内部变量 exports.xxx = xxx;
Module.exports既可以通过.语法,也可以直接赋值一个对象

  1. module.exports 初始值为一个空对象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

有这样一句语法:

	exports = module.exports = {...}

原理很简单:module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exportsexports 重新指向 module.exports

有一个小例子:

	var a = {name: 1}
	var b = a
	
	console.log(a)
	console.log(b)
	
	b.name = 2
	console.log(a)
	console.log(b)
	
	var b = {name: 3}
	console.log(a)
	console.log(b)

运行的结果为:

	{ name: 1 }
	{ name: 1 }
	{ name: 2 }
	{ name: 2 }
	{ name: 2 }
	{ name: 3 }

解释:a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一块内存,所以前两个输出一样。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,所以 a 也会体现出来,所以第三四个输出一样。当 b 被覆盖时,b 指向了一块新的内存,a 还是指向原来的内存,所以最后两个输出不一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值