Node中的全局变量和全局对象

全局对象和全局变量

概念:所有属性都可以在程序的任何地方访问,即全局变量。在JavaScript中,通常window是全局对象,而Node.js的全局对象是global,所有全局变量都是global对象的属性,如:console、process等。

global最根本的作用是作为全局变量的宿主,满足一下条件称为全局变量

1. 在最外层定义的变量

2. 全局对象的属性

3. 隐式定义的变量

▲ 在node中不可能在最外层定义变量,因为所有的用户代码都是属于当前模块的,而模块本身是不属于最外层上下文的.

全局对象process

它用来描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口,通常写本地命令行的程序的时候都会用到它。

下面来介绍几个常用的方法:

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

我们在建立一个文件叫做process.js,里面只需要包含打印这个函数信息的代码就可以

console.log(process.argv);

然后通过命令行来运行这个文件,

如上图,这个方法就是所有的参数变成了一个数组

2. process.stdout(stdout => standard output)标准输出流,我们用的console.log的底层就是使用这个实现的

下面的代码就是实现console.log的代码:

console.log=function(msg){
    process.stdout.write(msg);
}
console.log("shangyilong");
  1. process.stdin(standard input)是标准输入流,在老版本的标准流中,初始的时候他是被默认暂停的,想要从标准输入流中读取数据,必须通过process.stdin.resume()恢复流并编写流的事件相应的函数,在新版中是不用恢复流操作的也就是说标准输入流默认是开始的,当然新版的标准流操作是兼容老版本的流操作的

    这个是旧版本的标准流操作

//先要恢复流
process.stdin.resume();
//绑定上相应的事件
process.stdin.on(‘data‘,function(some){
    process.stdout.write(some.toString());
});

下面的新版本的标准输入流操作

//绑定上相应的事件,除了data事件之外readable也可以监听输入,这个事件的回调函数就没有参数了
process.stdin.on(‘readable‘,function(){
    var data = process.stdin.read();
    if(data !== null){
        process.stdout.write(data);
    }
});
// process.stdin.on(‘readable‘)
process.stdin.on(‘end‘,function(){
    process.stdout.write(‘is end‘);
});
  1. process.stderr是标准错误流,和process.stdout差不多只是输出的颜色不一样,看下图

    这是在webstrom的效果在命令行中是看不出的

  2. process.cwd():表示当前文件的绝对路径,这个和__dirname是有不同的__dirname输出的是通过node执行的js文件所在的绝对路径,看下图就能理解了,

  3. process.on()
    • process.on(‘exit’,function(){})表示当程序退出的时候会触发,
process.on(‘exit‘,function(){
    console.log("process will exit");
})
//output  process will exit
  • process.on(“SIGINT”,function(){}) (SIGINT=>signal interrupted)当我们退出程序的时候会触发这个函数,看下面的代码:
process.stdin.on(‘readable‘,function(){
    var data = process.stdin.read();
    if(data !== null){
        process.stdout.write(data);
    }
});
// process.stdin.on(‘readable‘)
process.stdin.on(‘end‘,function(){
    process.stdout.write(‘is end‘);
});

process.on(‘exit‘,function(){
    console.log("process will exit");
});
process.on(‘SIGINT‘,()=>{
    console.log(‘program will exit‘);
    //表示退出程序
    process.exit();
});

下图就是退出后的结果图:

7. process.nextTick().要理解这个还需要知道Node中的事件循环机制,如果不懂可以看我的另一篇博文:

Node你必须知道的事情

这个函数的功能就是为事件循环设置一项任务,Node会在下次事件循环响应时调用这个的回调函数;

这个函数也可以算的上是把复杂的事情拆分,编程小的进程;下面来看代码具体的解释一下:


function doSomeThing(data){
    console.log(data);
}

console.time("one");
function do1(arg,cb){
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    cb();

}
console.timeEnd(‘one‘);

console.time(‘two‘);
function do2(arg,cb){
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    doSomeThing(arg);
    process.nextTick(cb);
}
console.timeEnd(‘two‘);
//output  : 1ms
//output  : 0ms

根据上面的时间的测试就能看出来效率

更多内容请看下一篇文章

这是Node的一个系列,可以在本栏目下看其他关于Node文章,会 一直更新,有问题请在下方留言

时间: 2024-10-14 01:39:28

Node中的全局变量和全局对象的相关文章

nodejs学习笔记 -- 全局对象与全局变量

全局对象 在浏览器Javascript中,window是全局对象,而Node.js中全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性. 在Node.js中,我们可以直接访问到global的属性,而不需要在应用中包含它. 全局变量 global 最根本的作用是作为全局变量的宿主.按照 ECMAScript 的定义,满足以下条 件的变量是全局变量: 1.在最外层定义的变量: 2.全局对象的属性: 3.隐式定义的变量(未定义直接赋值的变量). 定义一个全局变量

Node.js 全局对象

JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量. 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性. 在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它. 全局对象与全局变量 global 最根本的作用是作为全局变量的宿主.按照

C++中如何访问全局变量和全局函数

全局变量和全局函数是相对局部变量和局部函数而言的,不在{}或者for, if 等范围内的都是全局变量或者全局函数,最简单的是在同一个文件中去声明. 例如在mian.cpp中 #include <iostream> int gResult; int gAdd(int a, int b) { return a + b; } int main(int argc, const char * argv[]) { gResult = aAdd(2, 3); } 这样的话main函数上面的都是都是全局变量和

JS全局对象的属性

全局对象是最顶层的对象,在浏览器环境指的是window对象.在ES5中,全局对象的属性与全局变量是等价的. var str = "hello"; function test(){ alert(window.str); } window.str = "hello"; function test(){ alert(str); } 以上两段代码输出结果都是hello. 这种规定被视为是JS语言的一大问题,因为很容易不知不觉就创建了全局变量.在ES6中,var命令和func

(转) 在PHP中使用全局变量

简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据成为全局数据,其中最常用的就是使用“global”关键字申明,稍后在文章中我们会具体的讲解到.   使用“global”关键字来申明全局数据的唯一缺点就是它事实上是一种非常差的编程方式,而且经常在其后导致程序中出现更大的问题,因为全局数据把你代码中原本单独的代码段都联系在一起了,这样的后果就是如果你

Node中的全局对象和全局变量

这个文章主要是对上一个文章的扩充 util对象 在Node环境已经安装好的前提下,使用util中已经定义的方法,只需要require('util')即可: uti是utility(功效,用途)的缩写.这util模块的设计主要是为了满足Node内部API的需求.下面来介绍两个比较重要的: 1.inherits 这个方法实现了原型链之间的继承(即JavaScript的继承) var util = require('util'); function base(){ this.name = 'helio

Node.js的全局对象和全局变量

1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. 例如你在DOS或终端窗口直接输入node,就会进入NODE的命令行方式(REPL环境).退出要退出的话,可以输入 process.exit(); 3)console:指向Node内置的console模块,提供命令行环境中的标准输入.标准输出功能. 通常是写console.log(),无须多言 2.

Node.js API —— Global Objects(全局对象)

// 说明 Node API 版本为 v0.10.31.    中文参考:http://blog.sina.com.cn/oleoneoy 本段为博主注解. 目录 ● 全局对象    ○ global    ○ process    ○ console    ○ Class: Buffer    ○ require()        ■ require.resolve()         ■ require.cache        ■ require.extensions    ○ __fil

Node.js:全局对象

概要:本篇博客主要介绍了node.js中的全局对象. 在JavaScript中,通常window是全局对象,而node.js中的全局对象是global,所有全局变量(除了global本身之外)都是global对象的属性.如:console.process. 1.全局对象与全局变量 global最根本的作用是作为全局变量的宿主.满足以下条件: ●在最外层定义的变量: ● 全局对象的属性: ● 隐式定义的变量(未定义直接赋值的变量). 2.process process是一个全局变量,即global