浅谈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的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php&mysql 日期操作小记
2012/02/27 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
Python中文编码那些事
2014/06/25 Python
python实现简单的计时器功能函数
2015/03/14 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python PIL模块的基本使用
2020/09/29 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
服装机修工岗位职责
2013/12/26 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
云台山导游词
2015/02/03 职场文书
国情备忘录观后感
2015/06/04 职场文书
鲁冰花观后感
2015/06/10 职场文书
小学大队委竞选口号
2015/12/25 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
DE1103使用报告
2022/04/05 无线电