Node.js:全局对象

概要:本篇博客主要介绍了node.js中的全局对象。

  在JavaScript中,通常window是全局对象,而node.js中的全局对象是global,所有全局变量(除了global本身之外)都是global对象的属性。如:consoleprocess

1.全局对象与全局变量

  global最根本的作用是作为全局变量的宿主。满足以下条件:

  ●在最外层定义的变量;

  ● 全局对象的属性;

  ● 隐式定义的变量(未定义直接赋值的变量)。

2.process

  process是一个全局变量,即global对象的属性。它用于描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口。下面介绍一些process对象的一些最常用的成员方法。

   process.argv:命令行参数数组,第一个元素是node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数。

console.log(process.argv);

  将以上代码存储为argv.js,通过以下命令行运行:

$ node argv.js 1991 name=byvoid --v "Carbo Kuo"
[   
    'node',
    '/home/byvoid/argv.js',
    '1991',
    'name=byvoid',
    '--v',
    'Carbo Kuo'
]

   process.stdout:标准输出流,通常我们使用的console.log()向标准输出打印字符,而process.stdout.write()函数提供了更底层的接口。

   process.stdin:标准输入流,初始时它是被暂停的,想要从标准输入读取数据,你必须恢复流,并手动编写流的事件响应函数。

process.stdin.resume();

process.stdin.on('data',function(data){
    process.stdout.write('read from console: ' + data.toString());    
});

  ▲ process.nextTick(callback):为事件循环设置一项任务,Node.js会在下次事件循环调响应时调用callback。

  Node.js进程只有一个线程,因此在任何时刻都只有一个事件在执行。如果这个事件占用大量的CPU时间。process.nextTick()提供了一个这样的工具,可以把复杂的工作拆散,变成一个较小的事件。

function doSomething(args , callback){
    somethingComplicated(args);
    callback();
}

doSomething (function onEnd(){
    compute();
})

  我们假设,compute()和somethingComplicated()是两个较为耗时的函数,以上的程序在调用doSomething()时会先执行somethingComplicated(),然后立即调用回调函数,在onEnd()中又会执行compute()。下面用process.nextTick()改写上面的程序:

function doSomething(args,callback) {
    somethingComplicated(args);
    process.nextTick(callback);
}

doSomething(function onEnd(){
    compute();
})

  改写的程序会把上面耗时的操作拆分成两个事件,减少每个事件的执行时间,提高事件响应速度。

  警告:不要使用setTimeout(fn,0)代替process.nextTick(callback),前者比后者效率要低得多。除此之外process还展示了process.platform、process.pid、process.execPath、process.memoryUsage()等方法,以及POSIX进程信号响应机制。

3.console

  console用于提供控制台标准输出。

  ▲ console.log( ):向标准输出流打印字符并以换行符结束。console.log()接受若干个参数,如果只有一个参数,则输出这个参数的字符串形式。如果有多个参数,则以类似于C语言printf()命令的格式输出。第一个参数是字符串,如果没有参数,只打印一个换行。

console.log('Hello world');
console.log('byvoid%diovyb');
console.log('byvoid%diovyb',1991);

运行结果为:

  ▲ console.error( ):与console.log()用法相同,只是向标准错误流输出。

  ▲ console.trace( ):向标准错误流输出当前的调用栈。

console.trace();

运行结果为:

原文地址:https://www.cnblogs.com/koto/p/5694515.html