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(),可以避免一些問題。
當然使用閉包 也會帶來一些問題。如下代碼所示:
[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(),可以避免一些問題。
當然使用閉包 也會帶來一些問題。如下代碼所示:
[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和DOM Interfaces來處理HTML
使用Javascript和DOM Interfaces來處理HTML...2006-10-10純JavaScript創(chuàng)建一個簡單的待辦事項列表
這篇文章主要給大家介紹了關(guān)于純JavaScript創(chuàng)建一個簡單的待辦事項列表的相關(guān)資料,清單通常用于記錄我們在某一天需要完成的所有事項,將最關(guān)鍵的任務(wù)放在最上方,將最不重要的事項放在最下方,需要的朋友可以參考下2024-01-01IE圖片緩存document.execCommand("BackgroundImageCache",
IE6下設(shè)置背景圖片是不會被真正cache住的,就算服務(wù)器做了cache,如果想cache住只能2011-03-03