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文章,会 一直更新,有问题请在下方留言

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值