日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/15 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

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

轉載于:https://www.cnblogs.com/lixiaomei-blog/p/7990067.html

總結

以上是生活随笔為你收集整理的Node.js 入门教程 (三):API-准备知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。