浅谈Nodejs中的作用域问题

在JS中有全局作用域和函数作用域,而在Nodejs中也自己的作用域,分为全局作用域(global)和模块作用域。

js作用域:

以前学js的时候我们的全局对象是window,如:

var a = 10;
console.log(window.a);

我们定义的全局变量默认是给window添加一个属性或者方法。

function fn(){
  var num = 22;
}
console.log(num);

报错,因为num是在函数中定义的,在函数外部是访问不了函数内部的变量的,虽然可以通过闭包来访问函数中的变量,但这不是我要说的重点,这也就是函数作用域。

好了,今天的重点来了,Nodejs中的作用域是什么样的?

首先我在文件1.js中定义了一个全局变量,全局变量用global来定义。

global.web = "Nodejs";

然后我通过2.js来引用1.js文件

require('./1.js');

在nodejs中已经没有了html,dom,和bom了,自然也没有了script标签,在node中如果需要引入一个文件则需要通过require方法来加载这个文件,里面写对应的文件路径,一般我们写相对路径,相对路径前面需要加./如果是绝对路径则用/。接下来我们在2.js中访问一下这个全局变量。

console.log(global.web); //Nodejs

ok,

这比较简单,一开始我还说了在Nodejs中还有模块作用域,那模块作用域又是什么?

说到模块作用域,不得不提模块化开发,如果你有过模块化开发的经验你一定曾经为了变量名而头疼过,因为如果你写的代码和你同事写的代码不规范的话,那么在代码中如果出现相同的变量名,那么后面的变量是会覆盖之前的变量的,在js中我们可以通过函数来解决这个问题,而在nodejs中我们除了可以使用函数的作用域以外,nodejs还规定了一种模块作用域,每个文件都是一个模块,也就是说每个文件都有各自的作用域,如果你不通过global来定义变量另外一个文件是访问不了这个文件的变量的。当然如果你想在一个文件访问另外一个文件的变量,除了global以外还有一种方法,后面我们会说到。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • NodeJS和BootStrap分页效果的实现代码

    1.数据处理 首先在动态js中,根据url参数获取数据库文档的数量,设置分页的大小,获取当前页面的数据,然后将文档数量pagecount,分页大小pagesize,以及当前页面currentpage传递到页面中. 2.处理分页效果 我采用的是JavaScript动态生成的,你也可以利用ejs支持函数的特性将其封装后生成html形式的分页. 首先,添加分页ul,在你的页面中需要显示的位置添加代码: <ul class="pagination" id="pagination

  • nodejs微信公众号支付开发

    odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能.这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求.现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信支付功能的开发.(微信暂时还没有提供 node 的支付功能) 一.请求CODE 请求 code 的目的就是获取用户的 openid(用户相对于当前公众号的唯一标识) 和access_token,请求的API:https://open.weixin.qq.com/connect/oauth2/a

  • nodejs简单实现操作arduino

    用Javascript来操作硬件早就不是一件稀奇的事情了. 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino: 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主要是 cylonjs 和 gort cylonjs其实就是一个操作"机器"的js框架,官网的介绍是这样的: Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Th

  • NodeJs读取JSON文件格式化时的注意事项

    进行NodeJs开发时偶然发现的一个雷点 正常情况下从JSON文件读取到字符后再通过JSON.parse没什么问题,只要格式不出错 有时在确保JSON格式正确时仍然会出现unexpected token异常 经过调查发现里面有不会显示的unicode字符 于是确定是UTF-8的问题,utf-8分有dom版和无dom版,一般编辑器不刻意设置会默认保存为带dom的utf8 解决办法是先将读到的文件转成二进制,然后检索dom符号删除 代码实现部分 function readText(pathname)

  • nodejs连接mongodb数据库实现增删改查

    准备 1.通过npm命令安装mongodb 2.安装mongodb数据库,这里不详细介绍了,安装网址:http://www.jb51.net/article/82522.htm CRUD操作 在此之前应对MongoDB数据库有所了解,知道它的一些增删查改命令. 1.增加 var MongoClient = require("mongodb").MongoClient; var DB_URL = "mongodb://localhost:27017/chm"; fun

  • Nodejs下用submit提交表单提示cannot post错误的解决方法

    <span style="font-size:18px;"><form action="/registOK" method="get"> <p>用户名:<input type="text" id="userName" name="userName"></p> <p>密码:<input type="pa

  • nodeJs内存泄漏问题详解

    之前一次偶然机会发现,react 在server渲染时,当NODE_ENV != production时,会导致内存泄漏.具体issues: https://github.com/facebook/react/issues/7406 .随着node,react同构等技术地广泛运用,node端内存泄漏等问题应该引起我们的重视.为什么node容易出现内存泄漏以及出现之后应该如何排查,下面通过一个简单的介绍以及例子来说明. 首先,node是基于v8引擎基础上,其内存管理方式与v8一致.下面简单介绍v8

  • Linux环境下nodejs的安装图文教程

    1.在官网下载nodejs,选择左边的. 2.选择文件右击点击extract here进行解压 3.进入bin目录,右击选择properties,解压文件可以随意放在系统里一个位置.复制location里的路径 4.添加路径 进入.bashrc文件,在末尾处添加步骤三的location里的路径. 6.在终端输入source .bashrc按回车键,再输出路径:echo $PATH检查路径是否已经添加成功 7.检测是否安装nodejs成功.在js文件目录下点击右键,再点击open in termi

  • 解析NodeJs的调试方法

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是肯定的. 但是还好,我们有## node-inspector ##来帮助我们解决一部分的调试问题,但是对于异步能力很强的NodeJs它还是有点力不从心. node-inspector 安装node-inspector 依旧是通过npm来全局安装node-inspector npm install -

  • Nodejs 搭建简单的Web服务器详解及实例

    使用 Nodejs 搭建简单的Web服务器 使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容

随机推荐