码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-13 03:07:22      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

全局对象和全局变量

概念:所有属性都可以在程序的任何地方访问,即全局变量。在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文章,会 一直更新,有问题请在下方留言

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

标签:

原文地址:http://blog.csdn.net/woshinannan741/article/details/51340763

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!