浅谈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中自定义事件实例
Jun 20 NodeJs
Nodejs初级阶段之express
Nov 23 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodeJS微信分享
Dec 20 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
判断PHP数组是否为空的代码
2011/09/08 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
JavaScript中的History历史对象
2008/01/16 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
python中rb含义理解
2020/06/18 Python
python对execl 处理操作代码
2020/06/22 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
自我评价的范文
2014/02/02 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
个人承诺书格式
2014/06/03 职场文书
2015年采购部工作总结
2015/04/23 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书