`

nodejs 全局变量

    博客分类:
  • js
 
阅读更多

    转载: http://www.sjsjw.com/kf_cloud/article/161_12953_7225.asp

 

 

如果你正在使用一系列node模块,或许是一个像Express.js一样的框架,突然需要使用几个全局变量。怎样在nodejs里创建全局变量呢?
       对此最常见的建议是“不使用‘var’关键字声明一个变量”或“给object对象添加一个变量”或“给OBJECT对象添加一个变量”。你会使用哪种方式呢?
       首先,让我们分析下global对象。打开一个终端,启动一个node命令提示界面:

$ node
> 

       在命令提示界面下看看关于global的所有信息:

> global

      飞天怪物的神圣母亲!!!那是一个超级大的对象!事实上,你看到了node的核心。所有在node进程里的对象都挂在这个对象上。如果你非常熟悉javascript所在的浏览器环境,global对象是等同于window对象。
      现在我们已经指导global对象是声明,让我们把玩下它:

> global.name
undefined
> global.name = 'El Capitan'
> global.name
'El Capitan'
> GLOBAL.name
'El Capitan'
> delete global.name
true
> GLOBAL.name
undefined
> name = 'El Capitan'
'El Capitan'
> global.name
'El Capitan'
> GLOBAL.name
'El Capitan'
> var name = 'Sparrow'
undefined
> global.name
'Sparrow'

      令人兴奋的观察!
      global和BLOBAL看起来是一个同一个东西且是一回事。确实,Global是global一个别名。
      令我们超感兴趣的是一个使用还是不使用var关键字声明的变量附加到global对象上。在node里创建一个全局变量的最基本的方式就是通过不使用var关键字声明一个变量。这种做法与使用一个模块(module)略有不同,接下来我讲解释它。
      当你启动一个node进程,将会启动一个模块,那么所有的模块将会被包含在它里面,所有模块都共享同一个global对象。应用上面的测试观察结合实 际,你就会明白全局变量怎样在node里工作。然而有些轻微的变化,如果使用var关键字声明的变量将会保留在本地模块里;这些声明的变量没有附加到 global对象里。
      那么现在你已经知道”没有使用var关键字声明的变量“,”向global里添加一个变量“,”给GLOBAL对象添加一个变量“,所有这些都是一回事。
      在一个module里全局声明的变量能够被其他任何模块使用它们的名字来引用,没必要从global对象引用它们。但是这不意味这你就可以这样做。为什么呢?请看这样:

var company = 'Yahoo';
console.log(global.company); // 'Google'
console.log(company); // 'Yahoo'

       当你使用global.company时,你知道你使用的是全局变量,但是它的备用名字company在module是当作局部变量来使用的。
       如果你打算在你的node应用里使用全局变量,那么我们讨论的创建变量方法会工作的很好。然而,请不要过度使用它。话虽如此,还有可以不使用全局对象的替代解决方案吗?
     是的,有这么一个,它涉及到module.exports的使用。让我使用例子来演示:
      File: main.js

exports.company = 'Google';
var m = require('./mod');

   File: mod.js

var company = require('./main').company;
console.log(company);

    现在看看执行结果:  

$ node main.js
Google

     这样你就实现了,一个其他模块的的变量你可以在另外的模块中使用他而没有使用global对象。你可以include main.js在其他的module来访问company名字。
   注意:引用(include)一个已经被其他模块引用过的模块时,仅仅创建一个指向之前包体的引用,因此这意味着不会极度消耗内存。也因为没有重新创建一个真正的包体,在module里的所有初始化方法没有再执行。
   因此,一个包体中,有2钟创建node全局变量的方法,一个是使用global对象,另一个是使用modules.exports。哪个是我推荐的呢?global方法适用小的应用,modules.exprots适用于大的应用。

分享到:
评论

相关推荐

    nodejs中全局变量的实例解析

    本文主要介绍了nodejs中全局变量的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧

    nodejs全局安装位置 、设置环境变量相关说明

    包括 node 安装 、设置全局安装位置 、设置环境变量解说等

    解决Nodejs全局安装模块后找不到命令的问题

    碰到了这问题,记录一下,看提示应该是环境变量的问题,执行如下命令得到...以上这篇解决Nodejs全局安装模块后找不到命令的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

    node-fetch-dom:从远程 html 页面检索 DOM 和全局变量的 Nodejs 库

    从远程 html 页面检索 DOM 和全局变量的 Nodejs 库。 在 MIT 许可下获得许可。 版权所有 源代码 用法 在命令行安装 $ npm install -g @stefcud/fetch-dom 运行命令参数是一个url页面和一个全局变量名 $ ...

    nodeJs的安装与npm全局环境变量的配置详解

    主要介绍了nodeJs的安装与npm全局环境变量的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    【JavaScript源代码】NodeJS和浏览器中this关键字的不同之处.docx

    NodeJS和浏览器中this关键字的不同之处  学习过JavaScript的...之后toWhere函数调用,看到函数中有this 就去判断this的指向,这里很清楚,this指向了window,this.type=2执行后,全局变量type就赋值为2了。 最后打印

    详解Node全局变量global模块

    主要介绍了详解Node全局变量global模块,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    nodejs-lab:学习 NodeJS 的实践培训

    全局变量、进程和缓冲区 异步模式 事件循环 异步函数 控制流和异常处理 沟通 事件发射器 簇 流 Socket.io RESTful API HTTP(方法,标头) REST 原则 表示 从快递开始 模板制作 数据存储库 MongoDB MongoDB 简介...

    Nodejs-v4.2.4以及npm和cnpm优雅安装

    1.在path变量中加入————-注意替换自己的相应目录 “;D:\Program Files\node\nodejs;D:\Program Files\node\node-global” 这里写图片描述 2.添加一个系统变量NODE_PATH 值为 “;D:\Program Files\node\node...

    CentOS 7.3下部署nodeJS项目

    1.首先下载安装包 点击这里前去下载linux版本nodeJS安装包 2.下载好之后放到服务器 可以使用xftp等软件将下载好的...使用n设置全局变量,node就可以全局使用了 ./n latest 6.上传node项目运行 推荐使用PM2管理node项

    浅谈Nodejs中的作用域问题

    我们定义的全局变量默认是给window添加一个属性或者方法。 function fn(){ var num = 22; } console.log(num); 报错,因为num是在函数中定义的,在函数外部是访问不了函数内部的变量的,虽然可以通过闭包来访问...

    npm全局环境变量配置

    我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在nodejs的主目录下,便在nodejs下建立”node_global”及”node_cache”两个...增加NOEDE_PATH(全局变量模块存放位置),进入“系统

    mac下的nodejs环境安装的步骤

    说明 我们以brew的方式进行安装。 node安装 #我们安装时要附加参数,因为在新版中,默认的安装参数不会安装npm包管理器。 brew install node --with-npm #检查安装是否成功 ➜ node -v ...#淘宝提供了多种使用方式,...

    oars:一个nodejs模块,使节点重新调整更加易于使用

    目标 全局变量 记录中 中间件 政策规定 路线 服务 桨发电机 API文件全局变量全局变量将由Oars自动公开。 默认情况下, , , 服务在全局变量中可用,您可以在每个控制器中直接使用它。记录中使您的服务器具有更多...

    nodejs学习笔记(一):centos7安装node环境

    由于windows环境安装nodejs只需要访问官方网站下载压缩包,解压即可。 首先检查自己是否安装wget,已安装可以跳过这步,未安装则需要先安装:yum install -y ...创建软连接(全局变量)依次执行:ln -s ~/node-v10.9.

    CUSTOMER-CLI:NodeJS CLI教程

    process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()。 编写一个nodejs命令行工具,process对象我们比较常用到的功能: ...

    elegant-threading:NodeJS和浏览器的多线程函数的简单定义

    通过npm i elegant-threading elegantThreading npm i elegant-threading安装它,或在非CJS环境中用作称为elegantThreading的全局变量(请参阅dist /文件夹)。 假设您有一个运行大量计算的函数: function ...

    vouchdb:在 nodejs 和浏览器中为 CouchDB 和 PouchDB 使用相同的基于 promise 的 api

    目前处于测试阶段......这将创建一个全局变量vouchdb 。 使用其属性使用基于 Promise 的 api 访问 couchdb。 这只是包装器,访问实际数据库包括以下一个或所有文件: src/vouchdb_couch.js 将 _couch 对象附加到 v

    Introduction-to-NodeJS:NodeJS简介-Microsoft

    启动节点,全局变量和过程 具有require和modules.exports的节点模块 核心模块 了解事件发射器 具有核心http的HTTP客户端 具有核心http的HTTP服务器 Npm基础 模块1的摘要:节点核心 模块1教程实验:节点Web爬网程序 ...

Global site tag (gtag.js) - Google Analytics