博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs随笔(三):全局对象之global
阅读量:7186 次
发布时间:2019-06-29

本文共 3646 字,大约阅读时间需要 12 分钟。

首先,进入node REPL:

mesogene@mesogene-team:~$ node>

查看global对象,发现其他全局对象(包括Buffer、require对象)以及全局方法都包含在global对象接口中

> console.log(global);{ global: [Circular],  process:    { title: 'node',     version: 'v0.12.1',     moduleLoadList:       [ 'Binding contextify',        'Binding natives',        ......  require:    { [Function: require]     resolve: [Function],     main: undefined,     extensions:       { '.js': [Function],        '.json': [Function],        '.node': [Function: dlopen] },     registerExtension: [Function],     cache: {} },  _: undefined }undefined>

定义一个变量:test = 'define a val';

> var test = 'define a val';undefined

再次查看global对象,你可以看到定义的变量test已经成为一个global对象的属性,并且出现在输出信息的底部:

> console.log(global);{ global: [Circular],  process:    { title: 'node',     version: 'v0.12.1',     moduleLoadList:       [ 'Binding contextify',        'Binding natives',      ...... require:    { [Function: require]     resolve: [Function],     main: undefined,     extensions:       { '.js': [Function],        '.json': [Function],        '.node': [Function: dlopen] },     registerExtension: [Function],     cache: {} },  test: 'define a val',  _: undefined }undefined

当我们通过在REPL中直接键入:gl = global查看global时我们发现:gl变量变为‘Circular refernce’

> gl = global{ global: [Circular],  process:    { title: 'node',     version: 'v0.12.1',  ......    gl: [Circular],  _: [Circular] }>

通常,当我们谈及context上下文是,一般指的是global对象。

应用:模块存在与自己的命名空间,这意味着,如果你在一个模块中定义一个全局(顶层)变量,它是不能被其他模块使用(也就是说,你不能在应用程序或其他模块中访问另一个模块的全局(顶层)变量)。只有那些被模块显式导出的部分才能被引用该模块的应用程序所使用。即调用模块对外提供的方法是访问模块内数据的唯一途径。

示例:在mod.js中定义一个模块,模块中定义一个全局变量globalVariables,以及对该变量进行设置和读取的函数(在读取函数中,我们使用console.log()方法将全局对象的内容打印出来)。

  mod.js代码如下:

var globalVariables;exports.setGlobal = function(val){    globalVariables = val;};exports.returnGlobal = function(){    console.log(global);    return globalVariables;};

  如果在另一个模块中可以访问该模块的全局变量globalVariables,那么我们在打印出的global对象中应该包含我们为其所设置的值。但事实并非如此:

  我们在REPL中加载mod.js模块:

> var mod1 = require('./mod1.js');undefined> mod1.setGlobal(34);undefined> var val = mod1.returnGlobal();{ global: [Circular],  process:    { title: 'node',     version: 'v0.12.     ......       '/node_modules' ] },  require:    { [Function: require]      resolve: [Function],      main: undefined,      extensions:       { '.js': [Function],         '.json': [Function],         '.node': [Function: dlopen] },      registerExtension: [Function],      cache: { '/home/mesogene/nodejs-workspace/03global/mod1.js': [Object] } },   mod1: { setGlobal: [Function], returnGlobal: [Function] },   _: undefined,   val: undefined } undefined

在返回globalVariables变量值之前,console.log方法先输出了global对象的内容,而且我们可以发现:在输出信息的最后部分包含了被引用模块的信息,但是输出的信息中没有包含任何关于全局变量globalVariables的信息。val变量的值是不确定的,因为该变量尚未设置(如上述代码蓝底白子所示)。如果我们在运行一次console.log(global),我们将会看到val的值是34。

> console.log(global);{ global: [Circular],  process:    { title: 'node',     version: 'v0.12.1',     ......  '/node_modules' ] },  require:    { [Function: require]     resolve: [Function],     main: undefined,     extensions:       { '.js': [Function],        '.json': [Function],        '.node': [Function: dlopen] },     registerExtension: [Function],     cache: { '/home/mesogene/nodejs-workspace/03global/mod1.js': [Object] } },  mod1: { setGlobal: [Function], returnGlobal: [Function] },  _: undefined,  val: 34 }undefined>

再强调一遍:调用模块对外提供的方法是访问模块内数据的唯一途径。

备注:如果在mod.js模块,代码是下面这个样子,那么global中必定包含globalValue:34的信息。

var globalVariables;exports.setGlobal = function(val){    globalVariables = val;    globalValue = val;};exports.returnGlobal = function(){    console.log(global);    return globalVariables;};

 

转载于:https://www.cnblogs.com/Richard-xie/p/4392802.html

你可能感兴趣的文章
交直流配电网潮流计算matlab,干货丨交直流混合配电网潮流计算(含分布式电源)...
查看>>
php前端怎么显示后端的数据,前端怎么显示后台获取的json格式数据
查看>>
matlab绕线式三级串阻,三相绕线式异步电动机转子串电阻起动的MATLAB仿真.docx
查看>>
safe mode php 打开,PHP的Safe_mode 打开后哪些地方受限
查看>>
局部放电 n-q-phi matlab,n-q-phi
查看>>
网站锁定php文件命令,php脚本文件执行锁定代码
查看>>
php如何隐藏,php怎么隐藏标签
查看>>
Oracle员工工资税收,oracle--查询本部门薪水大于平均工资的员工
查看>>
oracle语句更改数据精度,sql – 更改Oracle中数字列的精度
查看>>
oracle 不同列,如何根据所选列而不是Oracle中表的所有列获取不同的行
查看>>
php两个二维数组合并去重复,php二维数组合并及去重复的方法
查看>>
linux建立空文件的命令,linux创建文件命令
查看>>
linux服务器被ddos攻击记录日志,如何快速查看您的Linux服务器是否遭到来自某个IP地址的DDoS攻击...
查看>>
svn配置服务器如何切花Linux,JBMP安装配置过程
查看>>
linux 正序打印日志,通过syslog接收远程日志
查看>>
linux改telnet密码,Ubuntu 12.04 Telnet服务设置
查看>>
linux2017安装包,Linux发行版 KaOS 2017.07 发布,提供最新的Calamares安装程序
查看>>
linux c select tcp异步客户端,这几天在看socket select()实现异步IO的网络聊天室..
查看>>
linux chrome 硬件加速,在Chrome上开启硬件加速和预先渲染的方法技巧
查看>>
linux tar压缩gzip,Linux 压缩 解压命令 tar, gzip, zcat,bzip2, bzcat,compres
查看>>