node.js学习日记node.js的作用域

Posted langyjn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")


以上是关于node.js学习日记node.js的作用域的主要内容,如果未能解决你的问题,请参考以下文章

Node.js + MongoDB 全局变量和作用域

Node.js概述及编程基础

Node.js 入门教程 :模块

Node.js——HTTP作用域上下文

慕课网学习node.js

node.js初步了解——慕课网(回调,作用域,上下文)