Node.js 入门教程 (三):API-准备知识

==========关于异步===========

什么是回调?

回调是异步编程最基本的方法,比如nodejs中,需要按顺序执行异步逻辑的时候,一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数,逐层去嵌套,利用这种方式来让程序按照我们所期望的方式走完整个流程。

function learn(something){
    console.log(something)
}
function we(callback,something){
    something += ‘ is cool‘
    callback(something)
}
we(learn,‘Nodejs‘)

也可以使用匿名函数

we(function(something){

console.log(something)

}, ‘Jady‘)

什么是同步,异步?

同步就是执行一个任务,后一个任务等待前一个任务结束然后再执行,程序的执行顺序与任务的排列顺序一致。比如浏览器端的js是单线程的,js代码只能按顺序执行。

异步每个任务有一个或者多个回调函数,前一个任务执行结束之后不是执行后一个任务,而是执行回调函数,后一个任务也不是等待前一个任务结束就执行,程序的执行顺序与任务的排列顺序是不一致的。

var c = 0
function printIt(){
    console.log(c)
}
function plus(callback){
    setTimeout(function(){
        c += 1
        callback(c)
    },1000)
    
}
plus(printIt) 异步执行,会在1000ms后打印1
printIt() 同步执行,会立马打印0

什么是IO?

磁盘的写入和读出,数据的进和出,在nodejs中实际上就是为文件系统,数据库等资源提供接口,向文件系统发送一个请求的时候,不用等待硬盘,硬盘准备好之后非阻塞接口会通知到node

对于单线程的nodejs来说,我们可以通过回调的方式来进行异步编程,可以达到非阻塞的效果,那么在nodejs里面回调函数又是什么时候被调用的呢?那就关系到事件和事件驱动。在nodejs中,很多对象都可以触发事件,比如读文件,打开文件,客户端连接到server都会触发事件,所有能够触发事件的对象都是event.EventEmitter的一个实例。我们为每个事件注册了一个回调函数,而这个回调函数不是马上执行,只有当这个事件发生的时候才会调用这个回调函数,这种函数执行的方式就叫事件驱动,这种注册回调就是基于事件驱动的回调。如果有大量的异步操作,比如io的异步操作,或者计时器控制的延时操作,他们在完成的时候都会去调用响应的回调函数,从而完成一些密集的任务而不阻塞整个程序执行的流程,这么多事件就需要事件循环。事件循环是一个回调函数队列,当异步函数执行的时候,回调函数就会被压入这个队列,在nodejs中,靠一个单线程查询队列中是否有事件,当读取到一个事件的时候,将会调用跟这个事件关联的javascript函数。

==========关于异步===========

==========关于作用域和上下文==========

作用域和调用函数,访问变量的能力有关

作用域分为局部作用域和全局作用域,在局部作用域里可以访问到全局作用域的变量,但在局部作用域外面就访问不到局部作用里面所设定的变量

上下文和this关键字有关,是调用当前可执行代码的引用

this总是指向调用这个方法的对象

js里的this通常是当前函数的拥有者

this是js的一个关键字,代表函数运行时自动生成的一个内部对象,只能在函数内部使用

函数上下文执行对象要根据当前的运行环境而定,在全局运行环境中指向全局对象,在函数内部取决于函数被调的方式

被调方式包括:

1.作为对象的方法

this在var pet = {
    words:‘...‘,
    speak:function(){
        console.log(this.words)
        console.log(this===pet)
    }
}
pet.speak()方法内部,this就指向调用这个方法的对象

打印结果为:

...

true

2.函数的调用

this指向执行环境中的全局对象(浏览器->window nodejs->global)

function pet2(words){
    this.words = words
    console.log(this.words)
    console.log(this===global)
}
pet2(‘...‘)

打印结果:

...

true

3.构造函数

this所在的方法被实例对象所调用,那么this就指向这个实例对象

function pet3(words){
    this.words = words
    this.speak = function(){
        console.log(this.words)
        console.log(this)
    }
}
var cat = new pet3(‘miao‘)

打印结果:

miao
{ words: ‘miao‘, speak: [Function] }

js函数里面有定义时上下文和运行时上下文

更改上下文方法(更改this指向的内容,可方便实现继承)

call(list)

apply(array)

var pet = {
    words:‘...‘,
    speak:function(say){
        console.log(say+‘ ‘+this.words)
    }
}
var dog = {
    words:‘wang‘
}

pet.speak.call(dog,‘speak‘)

运行结果:

speak wang

function Pet(words){
    this.words = words
    this.speak = function(){
        console.log(this.words)
    }
}
function Dog(words){
    Pet.call(this,words)
}
var dog = new Dog(‘wang‘)

dog.speak()

运行结果:

wang

==========关于作用域和上下文==========

时间: 2024-10-07 04:54:47

Node.js 入门教程 (三):API-准备知识的相关文章

Node.js入门教程

http://www.nodebeginner.org/index-zh-cn.html#a-basic-http-server Node入门 作者: Manuel Kiessling翻译: goddyzhao & GrayZhang & MondayChen 关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版.因此,只有当进行错误更正以及针对

Node.js 入门教程 (二):模块

由于新工作要做前端,作为前端小白而且能尽快学习,所以选择慕课网的node.js的入门教程.博客只做自己学习的记录. JavaScript缺少模块管理机制,容易出现变量被覆盖,方法被替代的情况(既被污染).特别是存在依赖关系时,容易出现错误.采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行. CommonJs是一套规范,包括了modules,system,encodings,unit test等等来约定JavaScript应该怎么去组织和编

Node.js入门教程——如何实现文件上传功能

作者:zhanhailiang 日期:2014-11-16 本文将介绍如何使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/nodejs-upload-image-demo]# npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to gu

Node.js入门教程 第一篇 (环境配置及概念原理)

Node.js 概念 Node.js本质上是使用Google的V8引擎制作出来的服务框架.V8本身是Google为了解决Chrome浏览器的性能问题而制作的前端引擎(开源).本身依托于浏览器引擎,这也是为什么Node.js使用的是前端的JavaScript语言编程. V8的诞生是Google为了解决JavaScript的性能问题,用了内联缓存和隐藏类技术实现的前端引擎.V8使用C++编写,也因此V8可以在C++项目中完美兼容使用. V8被Google使用在大多数产品中,如Chrome浏览器,安卓

Node.js入门教程 第五篇 (Express框架)

Express框架 Express是适用于Node.js web的框架,提供了大量实用功能,例如路由功能及http功能. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. 安装: npm install express --save 可能需要的中间件: body-parser - Node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据. c

Node.js 入门教程 (三):API

(一)URL网址解析 URI: 统一资源标识符 URL:统一资源定位符 网址就是一个URL,说明了要以那种协议来访问哪种资源,URI更加抽象,是一个字符串格式规范,URL是URI的子集 parse() 第二个参数设为true,可以看到query变成了一个对象 第三个参数设置前后的区别 format() resolve() (二)querystring 参数处理 stringify()将对象序列化,第二个参数可以替换参数之间的连接值,第三个参数可替换key和value之间的连接值 parse()反

Windows 下 Node.js 入门

例子工程在此下载 Windows 下 Node.js 入门 NodeJS的历史就不说了,别人说过了.最最关键Google JavaScript V8 开发成功,运行效率很高,开放二次开发接口(C++库,功能类似常见的Lua,Python等脚本的的开放库).本来V8主要给Chrome浏览器服务的,经不住运行效率太优秀了,所以就有人动起了开发Native端的JavaScript运行环境的主意.NodeJS是这个思路的产物. 这是官网 https://nodejs.org/ 英文 https://no

Node.js入门:事件机制

Evented I/O for V8 JavaScript 基于V8引擎实现的事件驱动IO. 事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html ).Event模块(events.EventEmitter)是一个简单的事件监听器模式的实现.具有addListener/on,once,removeListener,removeAllListeners,emit等基本的事件监听模式的方法实现

24个很赞的 Node.js 免费教程和在线指南

JavaScript 最初是用来创建动态网站效果的的前端语言.而如今,这门脚本语言也可以用作后端开发,用于搭建 Web 服务器,开发接口,甚至创建博客.在下面这个列表中包括24个 Node.js 教程和在线指南.这些资源对于任何想要学习更多的关于 Node.js 的知识的开发人员都是很有用的. 您可能感兴趣的相关文章 经典网页设计:超炫动画效果单页网站 30个独具匠心的精美单页网站设计案例 25个以全屏照片为背景的精美网页作品 20个与众不同的网页联系表单设计案例 20个模糊背景在网站中的经典应