Node.js新手必须知道的4个JavaScript概念

若是只须要知道一种编程语言就能够构建一个全栈的应用程序,是否是特别了不得?Ryan Dahl为了把这个想法成为现实,创造了node.js。Node.js是创建在Chrome强劲的V8 JavaScript引擎上的服务器端框架。虽然最初是用C++编写的,可是应用程序经过JavaScript运行。node

这样一来,问题就解决了。一种语言就能够统治一切。并且,在整个应用程序中你只须要使用这一种语言。因此,咱们须要深入了解node.js。这就是本文的主题。编程

下面这四个基本概念是你想要掌握node.js所必需的。我会尽量长话短说向你们介绍它们。浏览器

1.非阻塞或异步I/O服务器

因为Node.js是一种服务器端框架,因此它的一个主要工做就是处理浏览器请求。在传统的I/O系统中,当前请求只有当先前请求的响应(HTML页面)已到达才会发出。这就是为何它被称为阻塞I/O。服务器阻塞其余请求是为了处理当前的请求,而这会致使浏览器的等待。app

Node.js不遵循I/O的这个原则。若是一个请求须要花费较长时间,那么Node.js会发送请求到事件循环(event loop)中,并继续在调用栈(call stack)中处理下一个请求。一旦未决请求完成处理,它就会告诉Node.js,并将响应渲染在浏览器上。框架

用一个虚拟的例子来理解这一点:异步

阻塞I / O编程语言

在这个餐厅例子中,服务员给出菜单,等待订单完成,而后再回到餐桌根据菜单上菜。在当前客户点菜时,服务员就在旁边等待,不接受其余客户的菜单。函数

非阻塞I / Ooop

在这个例子中,服务员得到菜单,并告知厨师,而后返回取另外一份菜单。在完成第一个菜单进程中,他既按照顺序给当前顾客上菜,也接受来自其余客户的点单。服务员不会由于阻塞来自于其余客户的点菜而浪费时间。

2.原型

原型是JavaScript的一个复杂概念。不过由于在Node.js中你要屡次用到原型,因此每一个JavaScript开发人员都必须了解这个概念。

在实现经典继承的语言中,例如Java,或C ++,对于以代码重用为目的的语言,你首先必须写一个类,而后从该类建立对象或扩展该类。可是,在JavaScript中不存在类的概念。首先在JavaScript中建立一个对象,而后从这个对象中增长本身的对象,或建立新的对象。这就是所谓的原型传承和经过原型的实现。

每一个JavaScript对象被连接到一个来自于它能够继承属性的原型对象。原型相似其余OO语言中的类,但不一样的是,它们自己也是对象。每个对象都连接到Object.prototype,而Object.prototype自带JavaScript预约义。

若是你经过obj.propName或 obj['propName'] 查找属性,而对象并不具备可经过 obj.hasOwnProperty(‘propName’)被检查的属性,那么JavaScript的运行时会在其原型对象中查找属性。若是原型对象也没有这样的属性,那么依次检查它的原型,直到找到匹配,或者到达Object.prototype。若是该属性不存在原型链,那么它会致使一个未定义的值。

经过下面的示例代码来理解这个概念:

当你建立一个新对象的时候,你必须选择一个应该是它的原型的对象。这里,咱们添加了一个方法到Object function。该方法建立了一个使用另外一个对象做为其原型的新对象,而原型做为参数传递给它。

当咱们改变新对象的时候,它的原型不受影响。可是,当咱们进行改变原型对象的时候,这些变化在全部基于该原型的对象上可见。

原型是一个复杂的概念。我将在另外一篇文章中详细说明。

3.模块

若是你曾经接触过Java中的包,那么Node.js中的模块也没有什么不一样。若是没有,那么也不用担忧。模块是包含特定目的代码的简单的JavaScript文件。模块模式用来使你的代码易于导航和使用。要使用模块属性,你须要在JavaScript文件中需求它,很像在Java类中导入包。

node.js中有两种类型的模块。

核心模块——这些模块是用Node.js库预编译过的。核心模块的目的是提供开发者常常发生和重复的代码段,这些代码段若是不可用的话,会致使开发者陷入不得不一次又一次地写相同代码的处境。一些常见的核心模块是HTTP,URL,EVENTS,FILE SYSTEM,等等。

用户定义模块——用户定义模块是开发人员在应用程序内建立用于特定目的的模块。当核心模块不能知足指望功能的时候就须要用户定义模块。

模块经过require函数提取。若是它是一个核心模块,那么参数仅仅是模块的名称。若是它是一个用户自定义模块,那么参数就是该模块在文件系统中的路径。例如:

4.回调函数

在JavaScript中,函数被认为是第一类对象。这意味着你能够对这些函数作全部可对常规对象作的操做。你能够赋值函数给变量,做为参数传递函数给方法,做为对象属性声明函数,甚至从函数返回函数。

回调函数是JavaScript中的匿名函数,它能够做为参数传递给其余函数,要么被执行或返回自函数稍后执行。这是回调函数——这个使用最广的函数编程范式的基础。

当咱们将回调函数做为参数传递给另外一个函数的时候,咱们只能传递函数定义……换言之就是,咱们不知道这个回调函数何时会执行。这彻底取决于调用函数的机制。它会在之后的某个时间点“回调”,所以而得名。这也是非阻塞或Node.js异步行为的惟一基础,以下例所示。

这是回调函数最简单的例子之一。咱们将一个匿名函数做为一个参数传递,这个参数只需在控制台上记录一些输出到setTimeout函数。它是惟一的函数定义,可是不知道什么时候执行。这须要通过2秒后,经过第二个参数,调用setTimeout函数来决定。

首先,第二个日志语句记录输出到控制台,而后,2秒钟后,回调函数中的日志语句记录输出。

上面这些就是Node.js新手必须知道的4个最重要的 JavaScript概念。你的见解呢?但愿你们可以畅所欲言!

相关文章
相关标签/搜索