1. 程式人生 > >nodejs學習筆記二:閉包和非同步程式設計

nodejs學習筆記二:閉包和非同步程式設計

閉包到底是什麼鬼

閉包就是函式��,但是它可以繼承並訪問它自身被宣告的那個作用域裡的變數。當你將一個回撥函式作為引數傳遞給另外一個進行i/o操作的函式時,回撥函式稍後會被呼叫,神奇的是,在被呼叫時,回撥函式會記住它自身宣告時所在的上下文,並且可以訪問該上下文及其父上下文裡的所有變數,這個強大的特性就是Node成功的核心。

舉個簡單的jquery例子:

    (function(){
        var clickCount=0;
        $('button#mybutton').on('click',function(){
            clickCount++;
alert('Clicked '+clickCount+' times.'); })
; })
();

用閉包的另一個好處是防止變數汙染全域性空間。

閉包如何輔助非同步程式設計

在進行事件驅動程式設計時,從定義事件發生時執行的程式碼開始,然後將程式碼放入一個函式當中,最後將該函式作為一個引數進行傳遞以備稍後呼叫。

在JavaScipt中,函式操作並不是孤立地工作而是會記住它被什麼時所在的上下文,這能讓函式操作其宣告時所在的上下文以及父上下文中所在的所有變數。

當你將回調函式作為引數進行傳遞時,它會在稍微某個時刻被呼叫,但即使宣告回撥函式的那個作用域已經返回,回撥函式依然可以操作該作用域或者父作用域中的任意變數,在上述最後一個例子中,雖然回撥函式時在jquery的click函式內部被呼叫,但是它依然可以訪問或者操作clickCount變數。

這顯示 應用閉包模式,可以從兩方面獲得極大好處:
1. 可以通過將狀態變數傳遞給函式而不必維護它就可以進行事件驅動程式設計
2. JavaScript的閉包會為你維護狀態變數

相關推薦

nodejs學習筆記非同步程式設計

閉包到底是什麼鬼 閉包就是函式��,但是它可以繼承並訪問它自身被宣告的那個作用域裡的變數。當你將一個回撥函式作為引數傳遞給另外一個進行i/o操作的函式時,回撥函式稍後會被呼叫,神奇的是,在被呼叫時,回撥函式會記住它自身宣告時所在的上下文,並且可以訪問該上下文及

樹莓派學習筆記軟體安裝

上一篇我們完成了 樹莓派ubuntu映象的燒錄和ROS的安裝,這一篇我們來講一下到底需要裝哪些軟體包 軟體1:vim(根據個人習慣) sudo apt-get install vim 軟體2:bo

zTree學習筆記展開樹收起樹

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti

nodejs學習筆記什麼是事件驅動程式設計風格

這年頭nodeJS真是如日中天啊,學前端的要是不知道nodeJS,都不好意思說自己和懂點程式碼的美工有啥區別,談到nodeJS就不得不先聊聊它的事件驅動程式設計風格。究竟什麼是事件驅動程式設計風格呢? 在傳統程式設計中,i/o操作和本地函式呼叫的處理方式相同:

javascript學習prototype原型使用基礎

c# 作用 cnblogs public return rem 聲明 pre 都是 閉包 function Person(name) { this.Username = name; var Userage = 18;

Django學習筆記實現部落格詳情,完善文章的分類標籤

前面我已經學會了使用Django框架搭建一個簡單的部落格框架。接下來學習的就是如何完善部落格的功能。 部落格詳情 功能 當用戶點選文章的“繼續閱讀”按鈕時,實現瀏覽文章的具體內容。即當點選“繼續閱讀”時根據傳入的請求和文章的id引數跳轉到對應的

Caffe學習筆記()使用Python生成caffe所需的lmdb檔案txt列表清單檔案

轉載請註明作者和出處: http://blog.csdn.net/c406495762 Python版本:Python2.7 執行平臺:Ubuntu14.04 最後修改時間:2017.4.20     在上個筆記中,已經學會了如何使用Caffe利用作者

google protobuf學習筆記使用原理

一.什麼是protobuf protobuf全稱Google Protocol Buffers,是google開發的的一套用於資料儲存,網路通訊時用於協議編解碼的工具庫。它和XML或者JSON差不多,也就是把某種資料結構的資訊,以某種格式(XML,JSON)儲存起來

matlab學習筆記plot畫圖怎麼設定線條型別顏色

matlab的繪圖功能很強大,因此它在科學實驗和社會調研中被廣泛應用。我們在繪製圖形時怎麼選擇線條的型別?比如需要虛線,星點線。。。或者怎麼設定線條的顏色?下面將將進行介紹。下面將以一個簡單的繪圖操作為例。繪製0到2*pi範圍內的正弦餘弦函式,預設的圖形是實線,顏色第一條是藍

SpringMVC學習筆記常用註解

title c學習 請求 pin 學習 lin att 詳解 stp 轉載請註明原文地址:http://www.cnblogs.com/ygj0930/p/6831976.html 一、用於定義類的註解:@Controller @Controller 用於標記在一個類上,

framework7學習筆記基礎知識

部分 cnblogs query 基礎 logs code 自己 $$ pan 一:DOM7 framework7有自己的 DOM7 - 一個集成了大部分常用DOM操作的高性能庫。它的用法和jQuery幾乎是一樣的,包括大部分常用的方法和jquery風格的鏈式調用。 在開發

Java基礎學習筆記十七 DBUtils連接池

ride 基本 代碼塊 ear 不同 一行 ria 靜態方法 ... DBUtils 如果只使用JDBC進行開發,我們會發現冗余代碼過多,為了簡化JDBC開發,本案例我們講采用apache commons組件一個成員:DBUtils。DBUtils就是JDBC的簡化開發工

Effictive Java學習筆記1創建銷毀對象

安全 需要 () 函數 調用 bsp nbsp bean 成了 建議1:考慮用靜態工廠方法代替構造器 理由:1)靜態方法有名字啊,更容易懂和理解。構造方法重載容易讓人混淆,並不是好主意    2)靜態工廠方法可以不必每次調用時都創建一個新對象,而公共構造函數每次調用都會

Nodejs學習筆記()

src 創建 return 解釋器 observer 等待 檢測 clas 數據接收 Node.js 回調函數 Node.js 異步編程的直接體現就是回調。 異步編程依托於回調來實現,但不能說使用了回調後程序就異步化了。 回調函數在完成任務後就會被調用,Node 使用了大量

Spring4學習筆記Bean相關

因此 code per cdata 通過 反射機制 特殊符號 cat too 一:Bean的配置形式 基於XML配置:在src目錄下創建 applicationContext.xml 文件,在其中進行配置。 基於註解配置:在創建bean類時,通過註解來

小程序學習筆記頁面文件詳解之 .json文件

fresh 小程序 整體 屬性 spa hit rbac style mdi 頁面配置文件—— pageName.json 每一個小程序頁面可以使用.json文件來對本頁面的窗口表現進行配置,頁面中配置項會覆蓋 app.json 的 window 中相同的配置

Docker學習筆記Docker的安裝

ros -h bionic docker customer tex 鏈接 space 版本 安裝環境:操作系統:Ubuntu 18.04 LTS,code name:bionic (#lsb_release -a)內核版本:4.15.0-29-generic(#uname

Python3學習筆記1變量簡單數據類型

tle 小數點 per port 小數 指導 day this python 2018-09-16 17:22:11 變量聲明:   變量名 = ?? 如: 1 message = "HelloWorld" 2 message = 1 3 message =

基於.NET的CAD次開發學習筆記AutoCAD .NET中的物件

1、CAD物件 一個CAD檔案(DWG檔案)即對應一個數據庫,資料庫中的所有組成部分,看的見(包括點、多段線、文字、圓等)和看不見(圖層、線型、顏色等)的都是物件,資料庫本身也是一個物件。 直線、圓弧、文字和標註等圖形物件都是物件。 線型與標註樣式等樣式設定都是物件。 圖層

分散式學習筆記從分散式一致性談到CAP理論、BASE理論

問題的提出 在電腦科學領域,分散式一致性是一個相當重要且被廣泛探索與論證問題,首先來看三種業務場景。 1、火車站售票 假如說我們的終端使用者是一位經常坐火車的旅行家,通常他是去車站的售票處購買車 票,然後拿著車票去檢票口,再坐上火車,開始一段美好的旅行----一切似乎都是那麼和諧。想象一