node.js学习日记(二)node.js的作用域

node.js的作用域

测试package1能否能通过require("./package2")来调用package2内的函数:

1 //paackage1.js
2 var a1 = 1;
3 
4 require("./package2");
5 
6 /*即使require了package2,也无法调用函数double_a*/
7 a1 = double_a(a1);//double_a is not defined
8 
9 console.log("package1:" + a1);
1 //paackage2.js
2 function double_a(a) {
3     return a * 2;
4 }
5 
6 exports.double_a = double_a;

报错了,并不能调用

 

package1要调用package2内的函数的正确方式:

1 //package1
2 var a1 = 1;
3 
4 /*todo:获取了package2的exports对象*/
5 var package2 = require("./package2");
6 
7 a1 = package2.double_a(a1);
8 console.log("package2:" + a1);
1 //package2
2 function double_a(a) {
3     return a * 2;
4 }
5 
6 /*todo:把double_a挂载到exports对象*/
7 exports.double_a = double_a;

成功调用函数

 

再来试一个,利用作用域链,让package1获取package2内的变量

1 //package1
2 var package2 = require("./package2");
3 console.log("name:" + package2.getName());
1 //package2
2 var name = "lyjn";
3 
4 /*todo:exports设置一个getName的方法获取name*/
5 exports.getName = function() {
6     return name;
7 };

完全OK

2.知识要点

在node中只有模块作用域,没有全局作用域

require的主要作用

1.加载模块并执行模块中的代码;
2.返回exports对象;

exports对象

1.所有模块都有一个exports对象,默认值是一个空对象`{}`;
2.可以给exports对象添加属性;

小技巧

1.require js文件时可以舍去.js,require("./package.js")等价于require("./package")

猜你喜欢

转载自www.cnblogs.com/langyjn/p/9142164.html