浅谈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教程之环境安装及运行
Nov 21 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
NodeJs模拟登陆正方教务
Apr 28 NodeJs
配置nodejs环境的方法
May 13 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
Nodejs 识别图片类型的方法
Aug 15 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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
留言板翻页的实现详解
2006/10/09 PHP
PHP的FTP学习(一)
2006/10/09 PHP
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Python数据结构之图的应用示例
2018/05/11 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
django如何自己创建一个中间件
2019/07/24 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
新郎结婚保证书
2015/02/26 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
Python中npy和mat文件的保存与读取
2022/04/24 Python