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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

1.什么是閉包

定義:是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)

創(chuàng)建閉包:在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)

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

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

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

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

<!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>產(chǎn)品 0</p><p>產(chǎn)品 1</p><p>產(chǎn)品 2</p><p>產(chǎn)品 3</p><p>產(chǎn)品 4</p></body></html>

 彈出結(jié)果都是5截圖 

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

解決辦法:立即執(zhí)行匿名函數(shù) 參數(shù)i是循環(huán)i的值 傳遞給num形參 匿名函數(shù)里 在創(chuàng)建閉包 可以訪問這個傳遞過來的值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>產(chǎn)品 0</p><p>產(chǎn)品 1</p><p>產(chǎn)品 2</p><p>產(chǎn)品 3</p><p>產(chǎn)品 4</p></body></html>

結(jié)果點擊第一展示

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) 閉包的作用域鏈 包括 閉包自身的作用域(一般返回匿名函數(shù)的作用域),外部函數(shù)的作用域(包含的外部函數(shù)),全局作用域

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

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

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

-1)創(chuàng)建閉包并立即執(zhí)行這個函數(shù) 不會再內(nèi)存中留下該函數(shù)的引用

-2 )結(jié)果 函數(shù)內(nèi)部的所有變量都會被立即銷毀

2.什么是作用域鏈

執(zhí)行環(huán)境:定義了變量或函數(shù)有權(quán)訪問其他數(shù)據(jù),決定它們各自的行為。

變量對象:每個執(zhí)行環(huán)境都有一個與之關聯(lián)的變量對象。

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

-1)全局執(zhí)行環(huán)境是最外圍的一個執(zhí)行環(huán)境

-2)web瀏覽器中,全局執(zhí)行環(huán)境默認是window對象,因此所有全局變量和函數(shù)都是作為window對象的屬性和方法創(chuàng)建的

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

-4)每個函數(shù)都有自己的執(zhí)行環(huán)境

作用域鏈:當代碼在一個執(zhí)行環(huán)境中執(zhí)行時,會創(chuàng)建變量對象 一個作用域鏈

作用域鏈用途:保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問

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

函數(shù)參數(shù)也被當做變量來看待,因此訪問規(guī)則與執(zhí)行環(huán)境中的其它變量相同。 例子:下面函數(shù)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();/*這里可以訪問上層執(zhí)行環(huán)境otherColor another chage 和全局color*/ var u =a[num]; } }</script>

全局 window

|

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

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

|

|---------------otherColor(局部變量 還有兩個就是調(diào)用的上層全局環(huán)境里的color變量和函數(shù)chageColor)

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

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

參考:

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

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

更多關于JavaScript相關內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品蜜芽在线观看| 日韩精品欧美大片| 久久精品99国产国产精| 亚洲精品麻豆| 在线精品观看| 亚洲97av| 91欧美精品| 欧美日韩一区自拍| 国产精品九九| 日韩不卡一区二区| 欧美一级二级视频| 国产欧美久久一区二区三区| 国产乱子精品一区二区在线观看 | 久久精品免费一区二区三区 | 国产66精品| 国产91在线精品| 精品日韩视频| 亚洲91精品| 99国产精品视频免费观看一公开 | 欧美va天堂在线| 日韩视频久久| 综合欧美精品| 国产欧美综合一区二区三区| 国产极品一区| 91精品婷婷色在线观看| 在线视频精品| 亚洲精品美女| 老牛国内精品亚洲成av人片| 国产中文在线播放| 亚洲午夜黄色| 日韩精品一区二区三区中文在线| 日韩av字幕| 红杏一区二区三区| 国产综合亚洲精品一区二| 蜜桃久久久久久| 国产高清精品二区| 免费污视频在线一区| 免费视频久久| 国产福利亚洲| 国精品一区二区| 91欧美日韩在线| 亚洲免费福利| 爽爽淫人综合网网站| 国产精品日本一区二区不卡视频| a国产在线视频| 麻豆精品91| 精品资源在线| 男女精品网站| 国产精品蜜月aⅴ在线| 在线一区视频观看| 亚洲免费一区三区| 日本久久黄色| 日韩专区在线视频| 精品一级视频| 图片区亚洲欧美小说区| 亚洲毛片网站| 欧美国产极品| 91精品99| 国产精品久久久久久av公交车| 久久精品官网| 国产情侣一区| 亚洲一区二区三区高清| 卡一卡二国产精品| 久久大逼视频| 国产在线视频欧美一区| 99视频精品| 精品99在线| 中文字幕一区二区精品区| 成人国产综合| 日韩av一级片| 91精品国产成人观看| 国产亚洲在线观看| 欧美交a欧美精品喷水| 国产字幕视频一区二区| 国产欧美日韩视频在线| 欧美中文一区二区| 欧美日韩xxxx| 欧美精品一区二区三区精品| 国产私拍福利精品视频二区| 久久蜜桃av| 久久精品凹凸全集| 在线一区免费| 国产成人精品一区二区三区视频 | 久久久久国产| 国产精品激情电影| 欧美成人日韩| 久久精品国产在热久久| 亚洲乱亚洲高清| 日本久久成人网| 国产色噜噜噜91在线精品| 女人av一区| 九九九精品视频| 日韩视频1区| 婷婷综合社区| 麻豆mv在线观看| 国产精品亚洲综合色区韩国| 99视频精品| 色综合www| 精品九九久久| 国产精品一区二区三区www| 国产精品97| 97精品国产福利一区二区三区| 日韩二区在线观看| 99香蕉国产精品偷在线观看 | 国产精品porn| 亚洲精品欧洲| 久久成人国产| 日韩视频不卡| 久久九九电影| 国产91欧美| 久久久久97| 国产欧美视频在线| 午夜久久av | 精品高清久久| 欧美午夜三级| 日韩黄色免费网站| 老司机精品久久| 黄色不卡一区| 婷婷国产精品| 99久久婷婷| 美女福利一区二区三区| 久久精品国产网站| 欧美aⅴ一区二区三区视频| 久久激情五月婷婷| 免费观看在线综合| 久久不见久久见免费视频7| 欧美福利专区| 国产精品密蕾丝视频下载| 激情综合亚洲| 首页国产精品| 亚洲午夜一级| 日韩在线中文| 福利一区在线| 国产成人精品一区二区免费看京| 日韩激情一二三区| 亚洲精品第一| 少妇精品久久久| 亚洲午夜免费| 日本 国产 欧美色综合| 99久久精品国产亚洲精品| 久久久久免费| 福利一区和二区| 在线亚洲人成| 日韩精品第一区| 欧美天堂视频| 久久久精品日韩| 激情偷拍久久| 午夜一级久久| 在线精品一区二区| 四虎精品永久免费| 欧美一区成人| 老鸭窝一区二区久久精品| 荡女精品导航| 欧美日韩一区二区综合| 99精品在线观看| 久久蜜桃av| 免费视频久久| 国产亚洲观看| 国产一区二区三区四区大秀| yellow在线观看网址| 久久久噜噜噜| jiujiure精品视频播放| 美日韩精品视频| 日本91福利区| 欧美精品97| 偷拍精品精品一区二区三区| 亚洲午夜av| 亚洲精品伊人| 国产精品视频一区视频二区| 免费亚洲婷婷| 国产在线观看www| 免费成人网www| 亚洲久久视频| 麻豆一区二区三| 91精品韩国| 香蕉成人久久| 91嫩草精品| 国产色播av在线| 国产亚洲毛片| 国产精品99久久免费| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产高清不卡| 亚洲精品中文字幕乱码| 日本亚洲最大的色成网站www| 欧美国产中文高清| 日韩电影免费网址| 好吊视频一区二区三区四区| 亚洲精品在线a| 色婷婷色综合| 国产精品腿扒开做爽爽爽挤奶网站| 最新国产精品久久久| 久久天堂影院| 黄色精品网站| 欧美视频一区| 精品捆绑调教一区二区三区| 亚洲尤物在线| 国产精品乱战久久久| 四虎4545www国产精品| 亚洲精品乱码| 中文一区一区三区高中清不卡免费|