nodejs-REPL/回调函数/事件循环
生活随笔
收集整理的這篇文章主要介紹了
nodejs-REPL/回调函数/事件循环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
REPL 回調函數 事件循環REPL-----------------------------------------------------
Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個電腦的環境,類似 Window 系統的終端或 Unix/Linux shell,我們可以在終端中輸入命令,并接收系統的響應。
REPL可以執行如下任務{讀取 - 讀取用戶輸入,解析輸入了Javascript 數據結構并存儲在內存中。執行 - 執行輸入的數據結構打印 - 輸出結果循環 - 循環操作以上步驟直到用戶兩次按下 ctrl-c 按鈕退出。
}簡單的表達式運算 > 1 + ( 2 * 3 ) - 4
使用變量 > var y = 10
多行表達式{> var x = 0undefined> do {... x++;... console.log("x: " + x);... } while ( x < 5 );
}下劃線(_)變量
你可以使用下劃線(_)獲取上一個表達式的運算結果:{$ node> var x = 10undefined> var y = 20undefined> x + y30> var sum = _undefined> console.log(sum)30undefined>
}REPL 命令{ctrl + c - 退出當前終端。ctrl + c 按下兩次 - 退出 Node REPL。ctrl + d - 退出 Node REPL.向上/向下 鍵 - 查看輸入的歷史命令tab 鍵 - 列出當前命令.help - 列出使用命令.break - 退出多行表達式.clear - 退出多行表達式.save filename - 保存當前的 Node REPL 會話到指定文件.load filename - 載入當前 Node REPL 會話的文件內容
}回調函數-----------------------------------------------------
回調函數在完成任務后就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支持回調函數。
回調函數一般作為函數的最后一個參數出現
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }----阻塞代碼實例
創建文件input.txt內容是{inputmessage
}
然后創建main.js 內容是{var fs = require("fs");var data = fs.readFileSync('input.txt'); //synchronization 同步console.log(data.toString());console.log("程序執行結束!");
}
輸出{inputmessage程序執行結束!
}----非阻塞代碼實例創建文件input.txt內容和上面一樣。然后main.js代碼改成這樣{var fs = require("fs");fs.readFile('input.txt', function (err, data) {if (err) return console.error(err);console.log(data.toString());});console.log("程序執行結束!");
}
輸出{程序執行結束inputmessage}事件循環-----------------------------------------------------Node.js 是單進程單線程應用程序,但是因為 V8 引擎提供的異步執行回調接口,通過這些接口可以處理大量的并發,所以性能非常高。Node.js 幾乎每一個 API 都是支持回調函數的。Node.js 基本上所有的事件機制都是用設計模式中觀察者模式實現。Node.js 單線程類似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每個異步事件都生成一個事件觀察者,如果有事件發生就調用該回調函數.Node.js 有多個內置的事件,我們可以通過引入 events 模塊,并通過實例化 EventEmitter 類來綁定和監聽事件,如下實例:// 引入 events 模塊var events = require('events');// 創建 eventEmitter 對象var eventEmitter = new events.EventEmitter();// 創建事件處理程序var connectHandler = function connected() {console.log('連接成功。');// 觸發 data_received 事件eventEmitter.emit('data_received');}// 綁定 connection 事件處理程序eventEmitter.on('connection', connectHandler);// 使用匿名函數綁定 data_received 事件eventEmitter.on('data_received', function(){console.log('數據接收成功。');});// 觸發 connection 事件eventEmitter.emit('connection');console.log("程序執行完畢。");
執行結果{連接成功。數據接收成功。程序執行完畢。
}Node 應用程序是如何工作的?{在 Node 應用程序中,執行異步操作的函數將回調函數作為最后一個參數, 回調函數接收錯誤對象作為第一個參數。input.txt{inputmessage}var fs = require("fs");fs.readFile('input.txt', function (err, data) {if (err){console.log(err.stack);return;}console.log(data.toString());});console.log("程序執行完畢");執行結果{程序執行完畢inputmessage}刪除input.txt讓他報錯,執行結果是這樣的{程序執行完畢Error: ENOENT: no such file or directory, open 'C:\Users\Administrator\Desktop\S\input.txt'}
}
?
總結
以上是生活随笔為你收集整理的nodejs-REPL/回调函数/事件循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs-安装/helloworld
- 下一篇: nodejs-EventEmitter