码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-06-07 21:46:22      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:模块   作用域链   日记   报错   col   var   exports   加载   默认   

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")

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

标签:模块   作用域链   日记   报错   col   var   exports   加载   默认   

原文地址:https://www.cnblogs.com/langyjn/p/9142164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!