浅谈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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
给老师的道歉信
2014/01/11 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
英文请假条
2014/04/11 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
使用CSS连接数据库的方式
2022/02/28 HTML / CSS