浅谈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 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
yii2安装详细流程
2018/05/23 PHP
jquery蒙版控件实现代码
2010/12/08 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python中的super用法详解
2015/05/28 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
PyQt实现计数器的方法示例
2021/01/18 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
少先队学雷锋活动总结范文
2014/03/09 职场文书
电子商务专业求职信
2014/07/10 职场文书
培训通知
2015/04/17 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript