浅谈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入门详解(多篇文章结合)
Mar 07 NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
JavaScript中this详解
2015/09/01 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python 自动刷博客浏览量实例代码
2017/06/14 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
运动会通讯稿200字
2014/02/16 职场文书
幼儿园见习报告
2014/10/30 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2015年纪委工作总结
2015/05/13 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS