浅谈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学习笔记之Connect中间件应用实例
Jan 27 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 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
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
给Function做的OOP扩展
2009/05/07 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
node.js基础知识小结
2018/02/26 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python如何运行js语句
2020/09/09 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
生产副总岗位职责
2013/11/28 职场文书
职工运动会邀请函
2014/02/02 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
五一劳动节活动记录
2014/03/23 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
小学音乐课教学反思
2016/02/18 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs