JavaScript 中級筆記 第四章 閉包
更新時間:2009年09月14日 13:28:33 作者:
前面已經(jīng)講解了 引用,函數(shù)重載,作用域和上下文,接下來,講解JavaScript中另一個重要的知識——閉包。
5,閉包
閉包意味著內(nèi)層的函數(shù)可以引用存在于包圍它的函數(shù)內(nèi)的變量,即使外層函數(shù)的執(zhí)行已經(jīng)終止。
讓我們先來看一個閉包的例子。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
代碼①是處于函數(shù)內(nèi)層,不過它可以使用外層的變量num。
閉合還能解決另一個常見的Js問題,全局變量的影響。
通過自動執(zhí)行匿名函數(shù)組合閉包,便可把原本屬于全局的變量隱藏起來??聪旅娴睦樱?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
在使用setTimeout時,我們經(jīng)常也用上了閉包。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
以這種方式使用setTimeout(),可以避免一些問題。
當(dāng)然使用閉包 也會帶來一些問題。如下代碼所示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
單擊li彈出的序號為 3 ,并不是正確的序號,它引用的值是最后一次的賦值。
我們可以使用下面代碼來解決:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
通過使用閉包對作用域的控制,從而符合了我們的要求。
上面的代碼可以分解為:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
閉包的概念不容易掌握,我也是花了大量時間和精力才理解。
6,小結(jié)
筆記(2),(3),(4)講解了 JavaScript中的幾個重要的內(nèi)容,包括引用,函數(shù)重載,作用域,上下文對象和閉包。
引用的關(guān)鍵內(nèi)容: 指針,數(shù)組引用,字符串引用,區(qū)別,傳值,傳址。
函數(shù)重載的關(guān)鍵內(nèi)容: 參數(shù)的數(shù)量,參數(shù)的類型,arguments,偽數(shù)組,typeof,constructor,區(qū)別-字符串和對象。
作用域的關(guān)鍵內(nèi)容: 函數(shù)劃分,全局作用域,全局對象,window對象的屬性,局部作用域,顯式聲明,隱式聲明。
上下文對象的關(guān)鍵內(nèi)容: this變量,call,apply,參數(shù)區(qū)別,數(shù)組。
閉包的關(guān)鍵內(nèi)容: 內(nèi)層函數(shù),外層函數(shù),變量,setTimeout,閉包問題,最后一次的賦值,閉包和作用域。
閉包意味著內(nèi)層的函數(shù)可以引用存在于包圍它的函數(shù)內(nèi)的變量,即使外層函數(shù)的執(zhí)行已經(jīng)終止。
讓我們先來看一個閉包的例子。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
代碼①是處于函數(shù)內(nèi)層,不過它可以使用外層的變量num。
閉合還能解決另一個常見的Js問題,全局變量的影響。
通過自動執(zhí)行匿名函數(shù)組合閉包,便可把原本屬于全局的變量隱藏起來??聪旅娴睦樱?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
在使用setTimeout時,我們經(jīng)常也用上了閉包。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
以這種方式使用setTimeout(),可以避免一些問題。
當(dāng)然使用閉包 也會帶來一些問題。如下代碼所示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
單擊li彈出的序號為 3 ,并不是正確的序號,它引用的值是最后一次的賦值。
我們可以使用下面代碼來解決:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
通過使用閉包對作用域的控制,從而符合了我們的要求。
上面的代碼可以分解為:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
閉包的概念不容易掌握,我也是花了大量時間和精力才理解。
6,小結(jié)
筆記(2),(3),(4)講解了 JavaScript中的幾個重要的內(nèi)容,包括引用,函數(shù)重載,作用域,上下文對象和閉包。
引用的關(guān)鍵內(nèi)容: 指針,數(shù)組引用,字符串引用,區(qū)別,傳值,傳址。
函數(shù)重載的關(guān)鍵內(nèi)容: 參數(shù)的數(shù)量,參數(shù)的類型,arguments,偽數(shù)組,typeof,constructor,區(qū)別-字符串和對象。
作用域的關(guān)鍵內(nèi)容: 函數(shù)劃分,全局作用域,全局對象,window對象的屬性,局部作用域,顯式聲明,隱式聲明。
上下文對象的關(guān)鍵內(nèi)容: this變量,call,apply,參數(shù)區(qū)別,數(shù)組。
閉包的關(guān)鍵內(nèi)容: 內(nèi)層函數(shù),外層函數(shù),變量,setTimeout,閉包問題,最后一次的賦值,閉包和作用域。
相關(guān)文章
JavaScript 輪播圖和自定義滾動條配合鼠標滾輪分享代碼貼
本文給大家分享一段js輪播圖和自定義滾動條的代碼片段,布局和樣式小編沒給大家多介紹,大家可以根據(jù)個人需求優(yōu)化,具體實現(xiàn)代碼,大家可以參考下面代碼片段2016-10-10
總結(jié)JavaScript的正則與其他語言的不同之處
我接觸過不少語言,我很看重一門語言的正則表達式是否強大,還有正則與語法的結(jié)合是否緊密.在這一點上,JavaScript做的還不錯,至少有正則字面量.當(dāng)然,最強大的還是Perl.但最近發(fā)現(xiàn)JavaScript中的正則有幾個不同于其他語言的地方,下面一起來看下。2016-08-08
typescript編寫微信小程序創(chuàng)建項目的方法
這篇文章主要介紹了typescript編寫微信小程序創(chuàng)建項目的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
使用ef6創(chuàng)建oracle數(shù)據(jù)庫的實體模型遇到的問題及解決方案
這篇文章主要介紹了使用ef6創(chuàng)建oracle數(shù)據(jù)庫的實體模型遇到的問題及解決方案,需要的朋友可以參考下2017-11-11
使用JavaScript遞歸函數(shù)封裝一個超級實用的轉(zhuǎn)換場景
這篇文章主要為大家詳細介紹了如何使用JavaScript遞歸函數(shù)封裝一個超級實用的轉(zhuǎn)換場景,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-11-11

