日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:214日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线日韩电影| 国产传媒av在线| 国产综合欧美| 日韩中文在线播放| 免费高潮视频95在线观看网站| 欧美成人精品一级| 麻豆精品少妇| 国产一区国产二区国产三区| 久久99精品久久久久久园产越南| 国产精品theporn| 国产精品一页| 精品一级视频| 91欧美在线| 91精品国产成人观看| 国产成人免费视频网站视频社区| 欧美国产另类| а√天堂8资源中文在线| 精品国产欧美日韩| 日韩电影免费在线观看| 极品裸体白嫩激情啪啪国产精品| 国内精品99| 免费成人av在线播放| 亚洲精品人人| 久久精品xxxxx| 91嫩草亚洲精品| 国产精品99免费看| 性欧美长视频| 久久国产尿小便嘘嘘| 久久精品国产精品亚洲毛片| 精品香蕉视频| 欧洲精品一区二区三区| 亚洲国产不卡| 一区二区电影在线观看| 国产乱论精品| 欧美成人基地| 亚洲一区二区日韩| 国产精品成人3p一区二区三区| 国产中文欧美日韩在线| 激情丁香综合| 日本免费在线视频不卡一不卡二| 国产精久久久| 亚洲成人一区在线观看| 鲁大师成人一区二区三区| 国产精品中文字幕制服诱惑| 成人三级高清视频在线看| 宅男在线一区| 欧美精品国产白浆久久久久| 成人日韩在线| 亚洲午夜久久| 日韩理论视频| 亚洲丝袜啪啪| 97精品国产| 免费人成黄页网站在线一区二区| 国产精品99久久免费| 国产韩日影视精品| 欧美国产三级| 激情久久久久久| 国产美女亚洲精品7777| 欧美亚洲精品在线| 69精品国产久热在线观看| 黄毛片在线观看| 在线精品福利| 在线一区av| 欧美日韩91| 偷拍欧美精品| 久久91视频| 美女黄网久久| 国产在线不卡一区二区三区| 免费成人在线观看| 欧洲精品一区二区三区| 国产日产精品_国产精品毛片| 久久理论电影| 免费视频一区二区三区在线观看| 国产一区成人| 国产一区二区三区四区五区传媒| av不卡免费看| 精品成av人一区二区三区| 视频一区中文字幕| 色爱综合av| 国产精品一区二区三区av| 亚洲综合丁香| 夜鲁夜鲁夜鲁视频在线播放| 国产亚洲一区二区三区不卡| 亚洲国产一区二区在线观看| 国产69精品久久| 91麻豆精品激情在线观看最新| 国产精品av一区二区| 毛片不卡一区二区| 亚洲精品乱码| 国精品一区二区| 色婷婷综合网| 国产欧美日韩| 亚洲网址在线观看| 好看不卡的中文字幕| 丁香六月综合| 国产成人免费视频网站视频社区| 欧美日韩一区自拍| 亚洲开心激情| 国产婷婷精品| 欧美日韩在线网站| 一本大道色婷婷在线| 久久99影视| 日本va欧美va欧美va精品| 99国产精品| 日韩电影免费网站| 精品一区二区三区中文字幕在线| 日本中文字幕视频一区| 国产亚洲在线观看| 99香蕉国产精品偷在线观看 | 中文久久精品| 激情久久久久久| 久久狠狠婷婷| 欧美日韩视频免费观看| 欧美一级鲁丝片| 美女视频免费精品| 欧美精品91| 久久精品国产99国产| 欧美极品一区二区三区| 91成人小视频| 日韩av三区| 日本在线观看不卡视频| 综合一区av| 亚洲精品一二| 一区二区三区四区日韩| 久久av在线| 国产一区二区精品| 午夜在线精品偷拍| 亚洲一区欧美| 午夜亚洲福利| 久久精品99久久久| 国产精品一区二区精品| 奇米777国产一区国产二区| 日韩精品中文字幕一区二区| 日精品一区二区三区| 清纯唯美亚洲综合一区| 国产精品最新自拍| 麻豆视频久久| 热三久草你在线| 久久三级福利| 国内精品福利| 久久成人亚洲| 亚洲专区视频| 91成人在线网站| 美女视频黄 久久| 国产h片在线观看| 少妇精品导航| 亚洲欧美日韩国产一区二区| 亚洲精品一级| 国产精品成人**免费视频| 精品午夜视频| 久久久9色精品国产一区二区三区| 久久久久久久久久久妇女 | 久久精品欧美一区| 免费久久精品视频| 日韩黄色在线观看| 国产精品亚洲产品| 麻豆mv在线观看| 午夜国产精品视频| 亚洲精品在线国产| 精品国产美女a久久9999| 亚洲成av在线| 日韩午夜一区| 日韩欧美中文在线观看| 精品三级国产| 亚洲欧美伊人| 欧美一区成人| 欧洲一级精品| 三级欧美韩日大片在线看| 91成人精品观看| 激情视频网站在线播放色| 亚洲国产一区二区三区在线播放| 三级久久三级久久久| 高清日韩中文字幕| 好吊日精品视频| 国产欧美久久一区二区三区| 国产精品亚洲一区二区三区在线观看| 久久av一区| 久久99久久久精品欧美| 久久精品亚洲人成影院| 日韩一区二区三区免费视频| 日韩88av| 亚洲精品韩国| 日本精品黄色| 综合一区av| sm捆绑调教国产免费网站在线观看| 午夜精品婷婷| 老司机免费视频一区二区| 欧美日韩一二三四| 国产探花一区在线观看| 欧美午夜精彩| 国产精品视频一区二区三区综合 | 99国产精品私拍| 美女av一区| 麻豆精品网站| 国产69精品久久| 亚洲免费毛片| 99久久99久久精品国产片果冰| 91麻豆精品| 狠狠爱成人网| 国产成人精品三级高清久久91|