node.js里面的全局变量

在node.js开发中,你一定用到过 console 类来打印一些东西或者debug.但是你在使用console类之前一定没有require 相关的包.


有的人会说,console 是node.js核心自带模块,不需要require ,错了,这里容易理解错.

核心代码库是你安装node.js时已经包含了并编译了此模块.

核心模块定义在node源代码的lib/目录下.

但是用的时候还是要require 一下.比如上一篇博文提到的node.js里querystring类的使用,这个就是核心代码库自带的,但是你用的时候还是要require('querystring');


而我们常常拿来直接就用的都是全部变量.

node.js有一个全局变量宿主 global ,而我们直接使用的这些全局变量都是这个宿主的一个属性.

比如

(一)process  

他描述了node.js的进程状态.提供了一个和操作系统简单的接口.

process 属性还包括好多属性,

标准的输入流 process.stdout 这个属性下还有各自的属性方法.....

标准的输出流 process.stdin  同上,也有自己的属性方法.....

事件循环  process.nextTick  有什么任务不能在当下执行完,需要交给下次事 件循环响应,比如占用大量cpu的一个IO密集型运算...


(二)console

比较常用的控制台标准输出类,向标准输出流 (stdout)和标准错误流(stderr)输出错误.

它可以接受若干个参数,用逗号分隔

console.log('aaa','bbb','ccc','dddd');
console.error() 输出当前错误流.
console.trace() 输出当前调用栈.


(三)Buffer

javascript对字符处理还是比较强的,但是对于二进制却非常棘手,所以有了Buffer,它把原始数据放在Buffer类的实例中,而这个实例类似一个数组,储存在V8堆之外的分配区域.

它有很丰富的方法属性足够单独开一篇博客来谈.


(四)require

这个方法就是我们经常用来引用包的方法,实际上它属于Modules类,本地的每个Modules都有此方法,所以也可以理解成是一个全局的方法,比如 require('http');


(五)__filename

获取当前所执行代码文件的路径,可以获得代码文件所在的绝对路径.也被称作node.js中的魔术变量.


(六)__dirname

获取当前执行脚本所在的目录,同上,也是node.js中的魔术变量.


(七)module

这个类和require类似,其实是属于每个模块的本地方法,直接拿来使用,你也可以理解成一个全局变量.

module下有个非常重要的方法 exports


(八)exports

exports 和 module.exports 其实是一样的,但是为了简化使用,exports 是 module.exports 的一个引用,他们最终指向一个对象.

我们从一个模块导出一个方法 exports.myfunction 等价于 module.exports.myfunction 明显前面的用户很简单,书写更少的代码.


(九)setTimeout(function(){},ms)

定时器,在指定ms好秒后运行前面的function 调用一次

使用: var t=setTimeout(function(){},ms);


(十)clearTimeout(t)

上面定义的定时器,可以用这个方法来移除.


(十一)setInterval(function(){}, ms)

每过ms好秒后,重复执行 function

使用: var t=setTimeout(function(){},ms);


(十二)clearInterval(t)

移除上面的 setInterval,取消定时重复任务.


总结,除去上面的全局对象方法,如果有需要你也可以自己定义全局变量.

定义方法,在入口文件定义,如下代码

global.pageInfo = {
    title:"一介布衣",
    url:"http://yijiebuyi.com"
}


如何使用:在项目的任意一个模块里直接引用 pageInfo.title 或 pageInfo.url 无需require任何东西.

还有一种定义全局变量的方法:利用javascript中Object的方法defineProperty定义属性的方法

Object.defineProperty(global, "pageInfo", {
        value: {
    				title:"一介布衣",
    				url:"http://yijiebuyi.com"
				},
        writable: false		//定义该属性只读 ,true 表示该属性值可被修改
});


回到顶部