美文网首页
全局变量

全局变量

作者: waly_ | 来源:发表于2018-12-17 20:16 被阅读0次

    来自于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中单独讨论

    相关文章

      网友评论

          本文标题:全局变量

          本文链接:https://www.haomeiwen.com/subject/gycqkqtx.html