浅谈Nodejs中的作用域问题


Posted in NodeJs onDecember 26, 2016

在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以外还有一种方法,后面我们会说到。

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

NodeJs 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
将nodejs打包工具整合到鼠标右键的方法
May 11 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 NodeJs
nodeJS删除文件方法示例
Dec 25 #NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 #NodeJs
详解Nodejs的timers模块
Dec 22 #NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 #NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 #NodeJs
详解nodejs 文本操作模块-fs模块(一)
Dec 22 #NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 #NodeJs
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
解析php入库和出库
2013/06/25 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
python数据结构之列表和元组的详解
2017/09/23 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Python with标签使用方法解析
2020/01/17 Python
python的json包位置及用法总结
2020/06/21 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
三星法国官方网站:Samsung法国
2019/10/31 全球购物
《放小鸟》教学反思
2014/04/20 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
2014年保密工作总结
2014/11/22 职场文书
仓管员岗位职责
2015/02/03 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
OpenFeign实现远程调用
2022/08/14 Java/Android