全局变量

2018-12-17  本文已影响0人  waly_

来自于http://nodejs.cn/api/globals.html的解读。

在node中,很多看着像全局变量的变量,实际只是模块内的变量,如__dirname.__filename,module,require,exports.,

下面就先说说这几个:

__dirname:

当前模块的目录名,__dirname=path.__dirname(__filename);

__filename:

当前的文件名,是一个绝对路径,/a/b/c/d.js

exports:

注意它与module.exports的区别,export只在模块内有效。

module:

实现当前模块的引用,module.exports导出指定的内容,通过require访问内容。

require:

实现对本地模块,json文件,node_module的引用,

下面就是node真正的全局变量,使用时无需require引入:

buffer:是一个类似于整数数组的实例,它是保存在V8堆外物理内存里,大小在定义时就是固定的,无法改变,是为了弥补js不能处理二进制流而生。

在存入或取出字符串时,需要指定字符编码(ascii,utf8,utf16le,ucs2,base64,latin1,binary,hex)

new Buffer()创建的方式已被废弃,目的是为了创建的实例更可靠,建议采用:Buffer.alloc(),Buffer.from(),Buffer.allocUnsafe().

其中Buffer.allocUnsafe()虽然创建会比Buffer.alloc()更快,但是它可能包含旧数据,造成不安全因素,需要fill或者write去填充未初始化的数据。

可以使用for ...of..进行迭代。

const buf = Buffer.from([1, 2, 3]); // 输出: // 1 // 2 // 3 for (const b of buf) { console.log(b); }

还可以buf.values() ,或者buf.keys,buf.enties()创建迭代器。

setImmediate():只存在node中

process.nextTick(),效率最高,消费资源小,但会阻塞CPU的后续调用; 

setTimeout(),精确度不高,可能有延迟执行的情况发生,且因为动用了红黑树,所以消耗资源大; 

setImmediate(),消耗的资源小,也不会造成阻塞,但效率也是最低的。

setTimeout采用的是类似IO观察者,setImmediate采用的是check观察者,而process.nextTick()采用的是idle观察者。

三种观察者的优先级顺序是:idle观察者>>io观察者>check观察者

setInterval():

当 delay 大于 2147483647 或小于 1 时,delay 会被设为 1。其他几个的延迟时间也是一样。

setTimeout():

应该注意的点是,此方法具有可用util.promisify()提供的promises常用变体

const util = require('util');

const setTimeoutPromise = util.promisify(setTimeout);

setTimeoutPromise(40, 'foobar').then((value) => { // value === 'foobar' (passing values is optional) // This is executed after about 40 milliseconds. });

与以上对应还有几个取消相应定时器的方法。

global:

在浏览器中,顶层作用域就是全局作用域。 这意味着在浏览器中,var something 会定义一个新的全局变量。 在 Node.js 中则不同,顶层作用域不是全局作用域,var something 的作用域只在模块内。

process:提供node进程的有关信息以及控制进程

此对象涉及内容较多,需在process中单独讨论

上一篇 下一篇

猜你喜欢

热点阅读