Node方向:global全局属性、定时器以及process进程对象

1、node中的全局属性

node中有一个全局对象global

1.1、定义全局属性和方法

global.属性 = 属性值
user.js:定义全局属性和全局方法

global.name = '小陈同学';
global.fn = function(){
    return 'global fn'
}

index.js:调用属性值跟全局方法

const user = require('./user');
console.log(name);
console.log(fn());
powershell执行结果.png
1.2、global全局还有一些自定义的属性和方法

如:console
全局对象global的属性,同时console的属性值也是一个对象,node中的console的用法虽然和js里很像,但是不是同一个对象。


全局对象的console.png
// console.dir 打印路径
console.dir(file);
// console.count 计数(其中括号内的作为标识)
console.count('i');
console.count('i');
console.count('i');
// 打印结果
i:1
i:2
i:3

console.time:测试打印时间

//测试打印到1000所需时间(毫秒数)
console.time('time');
for(var i = 0; i<1000;i++){

}
console.timeEnd('time');
结果:
time: 1.917ms

console.assert():断言
assert断言,接受两个参数,第一个参数是断言条件,第二个是断言输出
如果断言失败,输出后面的部分

// 此时断言为真,不会打印值
console.assert( 5 < 7 , '断言失败' )
//此时断言为假,输出
console.assert( 5 > 7 , '断言失败' )
结果:
Assertion failed: 断言失败

2、node中的全局方法

在javascript中,setInterval和clearInterval是浏览器提供的API,node中也提供了这两个方法,但是是node重写了这个方法并且将方法挂载到了global对象。使用方法与js差不多
setTimeInterval

setInterval(function(){
    console.log('set');
},1000);
结果:
set
set
set
....

在setTimeInterval中 ,从第三个参数开始往后,都会作为函数的实参传进去

// A,B会赋给x,y
setInterval(function(x,y){
    console.log(x+y);
},1000,'A','B')
结果:
AB
AB
AB
AB
.....

在javascript中,如果第一个参数为字符串,那么会强制的转为js语句去进行执行,看下面示例

// 在javascript中
setInterval('console.log(123)', 1000);
结果:
123
123
123
123
.......

或者前面定义了一个方法,然后将方法名称作为字符串写进去

function fn(){
  console.log(123);
}
setInterval('fn()',1000);

但是在node环境中,这样的写法是会报错的,node中定时器和js中区别就在于第一个参数它是不能为字符串的,js中第一个参数如果为字符串,会强制当成一个语句去执行,转为语句也执行不了的话才会报错。
clearInterval
清除定时器

let  timer = setInterval(function(){
  console.log(123);
},1000)

// 清除定时器
setTimeout(function(){
  clearInterval(timer);
},3000)

setTimeout
一定时间后才会执行该部分

// 2秒后执行
let  timer = setTimeout(function(){
  console.log(123);
},2000)

setImmediate
用法和定时器很像,但是不是属于定时器,不需要传递时间,类似于requestanimation()[当到了浏览器的刷新频率便会执行],这个也一样,会在每次的事件轮询的时候去执行(事件末尾)。
执行顺序
setTimeout在前,setImmediate在后

setImmediate(function(){
    console.log('setImmediate')
})
setTimeout(function(){
    console.log('setTimeout')
},0);
顺序结果.png

原因:因为尽管setImmediate在前,但是此时还没有到事件轮询,便会执行后面的setTimeout,当setTimeout执行完,再去查看消息队列中是否还有事件,没有事件的时候也就是在末尾去执行setImmediate,因此执行的先后顺序便是如此。

3、process进程对象

process是全局对象global的属性,同时属性值也是一个对象


process对象打印.png
3.1、argv参数

包括命令路径和运行的文件路径以及参数的集合

console.log('process',global.process.argv);

process [
  'C:\\Program Files\\nodejs\\node.exe',
  'D:\\node\\demo\\index.js'
]
3.2、execPath属性

启动Node.js进程的可执行文件的绝对路径名,就是process.argv数组中的第一个值。

console.log('process',global.process.execPath);

process C:\Program Files\nodejs\node.exe
3.3、env 环境变量

这个在开发过程中用来甄别是属于开发环境还是生产环境
开发环境:主要针对的是开发的过程,开发过程中用到的一系列函数、依赖等。
生产环境:主要针对是打包上线后的过程,会压缩css,js等

process.env.NODE_ENV = 'devlopment' //选择开发模式
env打印.png

使用这个的优点在于可以更方便的去调不同环境下的IP地址

const  env = {
  devlopment: 'http://127.0.0.1',
  product: 'http://192.168.11.22'
}
// 代码是生产环境下还是开发环境下
if(process.env.NODE_ENV === 'devlopment'){
  console.log('开发环境的部分')
}else{
  console.log('生产环境的部分')
}

3.4、cwd()方法

返回Node.js进程的当前工作的目录路径

console.log(process.cwd())
//返回文件路径
D:\node\demo

__dirName
这个是返回当前项目的根目录,而cwd()返回的是当前运行的文件的路径。

3.5、nextTick()方法

接受参数,第一个参数必填,是回调函数,第二个之后的参数是可选的,就是第二回调函数的参数。
process.nextTick()方法将callback添加到下一个时间点的队列,在javascript堆栈上的当前操作运行完成后及允许事件循环继续之前,此队列被完成耗尽,如果要递归调用process.nextTick(),则可以创建无限循环。

简单说:就是在下一个任务队列中去执行

setImmediate(function(){
    console.log('setImmediate')
})

setTimeout(function(){
    console.log('setTimeout')
},0)

process.nextTick(function(){
    console.log('nextTick');
})
执行顺序.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容