浅谈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命令行参数处理模块commander使用实例
Sep 17 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
监控Nodejs的性能实例代码
Jul 02 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 NodeJs
nodejs处理tcp连接的核心流程
Feb 26 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
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
PHP 转义使用详解
2013/07/15 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
python3中int(整型)的使用教程
2017/03/23 Python
python数据结构之列表和元组的详解
2017/09/23 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
python读取图片任意范围区域
2019/01/23 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
python实现粒子群算法
2020/10/15 Python
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
民事赔偿协议书
2014/11/02 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
React自定义hook的方法
2022/06/25 Javascript