成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

js 閉包深入理解與實例分析

瀏覽:177日期:2024-05-15 16:04:24

本文實例講述了js 閉包。分享給大家供大家參考,具體如下:

1.什么是閉包

定義:是指有權訪問另一個函數作用域中的變量的函數

創建閉包:在一個函數內部創建另一個函數

基本特點 在返回的匿名函數中 可以調用外部函數的變量 如下例中所示 內部函數(匿名函數) 可以訪問外部函數的變量num 形式如a[num] 原因是匿名函數作用域鏈中包括外部函數test1的作用域

閉包有權訪問包含函數內部的所有變量 如下面的 外部函數定義變量d 在閉包中可以直接訪問到d (var dd=d)

function test1(num){ var d; return function(a,b){ var d1=a[num],d2=b[num]; var dd=d; } }

實例參考 此時點擊產品1 到 產品4 結果都是5 點擊匿名函數的作用域鏈中包括外部函數init的活動對象 都是引用的同一個變量i 都是5 。解決辦法 返回的匿名函數 通過立即執行函數 把參數i傳給匿名函數

<!DOCTYPE HTML><html><head> <meta charset='utf-8' /> <title>閉包演示</title> <style type='text/css'> p {background:gold;} </style> <script type='text/javascript'> function init() { var pAry = document.getElementsByTagName('p'); for( var i=0; i<pAry.length; i++ ) {pAry[i].onclick = function() { alert(i);} } } </script></head><body onload='init();'><p>產品 0</p><p>產品 1</p><p>產品 2</p><p>產品 3</p><p>產品 4</p></body></html>

 彈出結果都是5截圖 

js 閉包深入理解與實例分析

解決辦法:立即執行匿名函數 參數i是循環i的值 傳遞給num形參 匿名函數里 在創建閉包 可以訪問這個傳遞過來的值num

pAry[i].onclick = function(num){//......}(i)

<!DOCTYPE HTML><html><head> <meta charset='utf-8' /> <title>閉包演示</title> <style type='text/css'> p {background:gold;} </style> <script type='text/javascript'> /*修改后*/ function init() { var pAry = document.getElementsByTagName('p'); for( var i=0; i<pAry.length; i++ ) { pAry[i].onclick = function(num) { return function(){ alert(num) } }(i) } } </script></head><body onload='init();'><p>產品 0</p><p>產品 1</p><p>產品 2</p><p>產品 3</p><p>產品 4</p></body></html>

結果點擊第一展示

js 閉包深入理解與實例分析

還有這樣寫也是可以的

function a(){ var pAry = document.getElementsByTagName('p'); for( var i=0; i<pAry.length; i++ ) {(function(num){ pAry[num].onclick = function() { alert(num); }})(i) } }

1.1 閉包的原理

-1) 閉包的作用域鏈 包括 閉包自身的作用域(一般返回匿名函數的作用域),外部函數的作用域(包含的外部函數),全局作用域

-2)通常,函數的作用域和所有變量都會在函數執行結束后被銷毀

-3)函數返回一個閉包,這個函數的作用域會一直保存在內存中直到閉包不存在為止

使用閉包可以模仿塊級作用域

-1)創建閉包并立即執行這個函數 不會再內存中留下該函數的引用

-2 )結果 函數內部的所有變量都會被立即銷毀

2.什么是作用域鏈

執行環境:定義了變量或函數有權訪問其他數據,決定它們各自的行為。

變量對象:每個執行環境都有一個與之關聯的變量對象。

執行環境定義的所有變量和函數都保存在變量對象中。編寫代碼無法訪問這個對象,解析器在處理數據時會在后臺使用它。

-1)全局執行環境是最外圍的一個執行環境

-2)web瀏覽器中,全局執行環境默認是window對象,因此所有全局變量和函數都是作為window對象的屬性和方法創建的

-3)某個執行環境中的所有代碼執行完畢后,該環境被銷毀,保存在其中的所有變量和函數定義都隨之銷毀 全局執行環境直到應用程序退出--例如關閉網頁或瀏覽器時才會被銷毀

-4)每個函數都有自己的執行環境

作用域鏈:當代碼在一個執行環境中執行時,會創建變量對象 一個作用域鏈

作用域鏈用途:保證對執行環境有權訪問的所有變量和函數的有序訪問

標識符解析:沿著作用域鏈一級一級的向上搜索標識符的過程。

函數參數也被當做變量來看待,因此訪問規則與執行環境中的其它變量相同。 例子:下面函數chageColor(num){} 在閉包里tempColor(a){}里可用a[num]訪問

實例解析

<script type='text/javascript'> /*全局變量*/ var color = ’red’ ; function changeColor(num){ var otherColor = ’blue’, another =color, chage = changeColor(); function tempColor(a){ var temp = otherColor, temp2 = color, temp3 = changeColor();/*這里可以訪問上層執行環境otherColor another chage 和全局color*/ var u =a[num]; } }</script>

全局 window

|

|-------------color 全局變量

|------------changeColor()

|

|---------------otherColor(局部變量 還有兩個就是調用的上層全局環境里的color變量和函數chageColor)

|---------------tempColor()

|-------------------h(變量h不能被上層執行環境調用 只能在tempColor()里調用 標識符向上搜索沿著作用域鏈 這個環境里可以調用外層環境和全局環境的變量)

參考:

https://www.jb51.net/article/183094.htm

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧洲另类国产综合| 久久婷婷丁香| 久久久久一区| 日韩欧美国产综合一区 | 国产精品成人免费在线| 欧美黄色一区| 国产精品丝袜久久久久久app| 成+人+亚洲+综合天堂| 91精品婷婷国产综合久久 | 中文字幕一区二区三区在线不卡 | 永久久久久久| 中文字幕一区二区三区蜜月| 午夜精品av| 国产亚洲欧美在线| 欧美日韩免费| 亚洲色图20p| 91久久精品国产91久久性色tv| 国产精品久久精品日日| 在线播放一区| 亚洲国产一区视频| 久久国产一区| 久久99精品一区二区三区 | 亚洲欧美日韩国产综合在线| 亚洲看片免费| 亚洲激情图片小说视频| 亚洲美女一区| 亚洲成人免费在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲国产成人高清精品| 久久动漫亚洲| 蜜桃视频在线一区| 欧美另类一区二区三区| 国产ts人妖一区二区| 久久免费美女视频| 精品二区久久| 香蕉成人啪国产精品视频综合网| 一本色道久久综合狠狠躁的推荐 | 亚洲午夜免费福利视频| 久久婷婷影院| 麻豆国产精品一区二区三区| 91精品婷婷国产综合久久竹菊| 日韩在线一区二区三区| 欧美视频一区在线| 成人免费毛片嘿嘿连载视频| 国产丝袜在线精品| 国产日韩综合| 美女视频黄a大片欧美| 欧美一区二区三区四区视频| 91猫先生在线| 亚洲欧美日韩小说| 欧洲色大大久久| 国产不卡高清在线观看视频| 国产性做久久久久久| 国产区二精品视| 日本视频免费一区| 欧美一级二级三级乱码| 欧美特黄一区| 日韩精品三区四区| 日韩视频在线永久播放| 好吊视频一区二区三区四区| 性久久久久久久久久久久| 欧美唯美清纯偷拍| 成人91在线观看| 亚洲日本一区二区三区| 色婷婷av一区二区| 99九九99九九九视频精品| 亚洲乱码中文字幕| 欧美日韩一区高清| 女女同性精品视频| 无吗不卡中文字幕| 日韩精品综合一本久道在线视频| 亚洲一二三区在线| 美女网站色91| 久久美女艺术照精彩视频福利播放| 亚洲日本国产| 国内欧美视频一区二区| 国产日韩欧美在线一区| 麻豆精品视频| av欧美精品.com| 一区二区三区鲁丝不卡| 91麻豆精品国产| 很黄很黄激情成人| 国产真实乱子伦精品视频| 国产精品天美传媒| 欧美日韩在线电影| 狠狠爱综合网| 国产在线精品国自产拍免费| 自拍偷拍欧美精品| 日韩亚洲国产中文字幕欧美| 国产日韩欧美一区二区| 日韩av二区在线播放| 日本一区二区免费在线| 色婷婷亚洲综合| 91视频在线看| 日本亚洲天堂网| 日本一区二区免费在线观看视频| 日本韩国欧美一区| 伊人婷婷久久| 成人免费精品视频| 五月综合激情网| 中文字幕欧美日本乱码一线二线| 欧美亚州韩日在线看免费版国语版| 欧美日韩高清免费| 国产乱子轮精品视频| 亚洲一区二区三区影院| 久久久99精品免费观看不卡| 91福利国产成人精品照片| 影音先锋久久资源网| 成人性生交大片免费看视频在线 | 欧美日韩影院| 极品少妇xxxx偷拍精品少妇| 亚洲人成人一区二区在线观看| 日韩丝袜情趣美女图片| 久久婷婷久久| 韩国一区二区三区美女美女秀| 国产精品1区2区| 性欧美疯狂xxxxbbbb| 国产精品毛片久久久久久久| 欧美一区二区在线免费观看| 色婷婷精品大在线视频| 日韩视频在线观看国产| 91亚洲永久精品| 国产精品亚洲а∨天堂免在线| 亚洲一区在线观看免费 | 欧美 日韩 国产一区二区在线视频| 久久99国产精品久久99果冻传媒| 中文字幕一区二区在线播放| 日韩欧美一级片| 在线看日韩精品电影| 亚洲免费大片| 午夜欧美精品| 99久久久无码国产精品| 国产大片一区二区| 久久99国产精品尤物| 污片在线观看一区二区 | 欧美一区二区三区久久精品茉莉花| 久久99深爱久久99精品| 国产精品久久久久婷婷| 久久久久久久综合日本| 日韩亚洲电影在线| 欧美日韩另类一区| 蜜桃精品久久久久久久免费影院| 亚洲国产精品一区二区第一页| 91在线观看成人| 丁香亚洲综合激情啪啪综合| 国产自产高清不卡| 另类人妖一区二区av| 日韩黄色片在线观看| 亚洲最色的网站| 亚洲欧美日韩中文字幕一区二区三区 | 欧美午夜精品一区二区蜜桃| 国产精品尤物| 99香蕉国产精品偷在线观看| 亚洲午夜在线观看| 欧美日韩国语| 国产精品v日韩精品v欧美精品网站 | 亚洲免费av高清| 国产精品久久久久久久久久久免费看| 久久九九影视网| 久久久久久亚洲综合| 精品国产乱子伦一区| 日韩欧美国产综合| 日韩欧美在线1卡| 日韩欧美一卡二卡| 日韩女优av电影| 欧美大片日本大片免费观看| 日韩午夜在线播放| 日韩一级高清毛片| 日韩一区二区在线看片| 日韩一区二区在线观看视频 | 一区二区三区在线视频免费| 亚洲日本一区二区三区| 亚洲男人的天堂网| 亚洲一区二三区| 亚洲成人动漫av| 偷拍亚洲欧洲综合| 日本不卡123| 精彩视频一区二区三区| 久久精品国产亚洲a| 亚洲综合在线观看视频| 亚洲bt欧美bt精品777| 日本成人在线看| 久久99久国产精品黄毛片色诱| 国产麻豆一精品一av一免费| 懂色av中文字幕一区二区三区| k8久久久一区二区三区| 欧美国产综合视频| 好看的亚洲午夜视频在线| 日韩午夜电影| 老司机一区二区三区| 在线观看成人免费视频| 7777精品伊人久久久大香线蕉| 欧美一区二区日韩| 精品国产髙清在线看国产毛片| 国产三级欧美三级| 亚洲天堂av老司机| 石原莉奈在线亚洲三区| 国产一区二区三区| 91最新地址在线播放| 亚洲日本无吗高清不卡|