美文网首页
全局变量

全局变量

作者: 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中单独讨论

相关文章

  • Objective-C中static、const和extern关

    一 static 1,修饰全局变量 在全局变量前加static,全局变量就被定义成为一个静态全局变量(全局变量和静...

  • python函数

    函数 全局变量 获取全局变量python获取全局变量直接获取 修改全局变量python不允许直接修改全局变量如果要...

  • 【C语言笔记】<二十一>内部全局变量和外部全局变量

    全局变量分为两种: 1.外部全局变量, 默认情况下所有的全局变量都是外部全局变量什么事外部全局变量? 可以被其它文...

  • 1、static const 全局变量 单利为什么用stati

    1)static,extern修饰全局变量 static修饰的全局变量只能在当前文件中使用 全局变量和静态全局变量...

  • 全局变量

    客户端全局变量 bool GlobalVariableCheck( string 全局变量名 ) 检查全局变量存...

  • C/C++知识点分享(16)

    1、statac全局变量、局部变量、函数与普通全局变量、局部变量、函数,static全局变量与普通的全局变量有什么...

  • C/C++ 中 static 的用法

    C语言: 1、静态全局变量:1、在全局变量前加上 static 关键字,即为静态全局变量2、静态全局变量在程序的数...

  • php预定义超全局变量、超全局数组

    一、超全局变量:除了有全局变量的特点外,可以无须声明,直接使用。全局变量: 超全局变量: 二、php提供了九种超全...

  • 变量、函数、存储过程

    一、变量 1.1全局变量 mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默...

  • 原型、原型链、实现继承

    一、全局变量 window是全局变量(浏览器的叫法),EMCAScript规定全局变量是global。window...

网友评论

      本文标题:全局变量

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