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

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

JavaScript 閉包的使用場景

瀏覽:103日期:2023-10-12 18:20:05

一、閉包

由于在Javascript語言中,只有函數內部的子函數才能讀取局部變量,閉包就是能夠讀取其他函數內部變量的函數。所以,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。

比如下面的代碼:

function f1() { var n = 999; function f2() { console.log(n); } return f2;}var result = f1();result();//999

函數f2就被包括在函數f1內部,這時f1內部的所有局部變量,對f2都是可見的。但是反過來就不行,f2內部的局部變量,對f1就是不可見的。

這就是Javascript語言特有的'鏈式作用域'結構(chain scope),子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。

既然f2可以讀取f1中的局部變量,那么只要把f2作為返回值,就可以在f1外部讀取它的內部變量了。

二、閉包的使用場景

1.setTimeout

原生的setTimeout傳遞的第一個函數不能帶參數,通過閉包可以實現傳參效果。

function f1(a) { function f2() { console.log(a); } return f2;}var fun = f1(1);setTimeout(fun,1000);//一秒之后打印出1

2.回調

定義行為,然后把它關聯到某個用戶事件上(點擊或者按鍵)。代碼通常會作為一個回調(事件觸發時調用的函數)綁定到事件。

比如下面這段代碼:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>測試</title></head><body> <a href='http://www.b3g6.com/bcjs/16505.html#' rel='external nofollow' rel='external nofollow' rel='external nofollow' id='size-12'>12</a> <a href='http://www.b3g6.com/bcjs/16505.html#' rel='external nofollow' rel='external nofollow' rel='external nofollow' id='size-20'>20</a> <a href='http://www.b3g6.com/bcjs/16505.html#' rel='external nofollow' rel='external nofollow' rel='external nofollow' id='size-30'>30</a> <script type='text/javascript'> function changeSize(size){ return function(){ document.body.style.fontSize = size + ’px’; }; } var size12 = changeSize(12); var size14 = changeSize(20); var size16 = changeSize(30); document.getElementById(’size-12’).onclick = size12; document.getElementById(’size-20’).onclick = size14; document.getElementById(’size-30’).onclick = size16; </script></body></html>

當點擊數字時,字體也會變成相應的大小。

3.函數防抖

在事件被觸發n秒后再執行回調,如果在這n秒內又被觸發,則重新計時。

實現的關鍵就在于setTimeOut這個函數,由于還需要一個變量來保存計時,考慮維護全局純凈,可以借助閉包來實現。

如下代碼所示:

/** fn [function] 需要防抖的函數* delay [number] 毫秒,防抖期限值*/function debounce(fn,delay){ let timer = null //借助閉包 return function() { if(timer){ clearTimeout(timer) //進入該分支語句,說明當前正在一個計時過程中,并且又觸發了相同事件。所以要取消當前的計時,重新開始計時 timer = setTimeOut(fn,delay) }else{ timer = setTimeOut(fn,delay) // 進入該分支說明當前并沒有在計時,那么就開始一個計時 } }}

4.封裝私有變量

如下面代碼:用js創建一個計數器

方法1:

function f1() { var sum = 0; var obj = { inc:function () { sum++; return sum; }}; return obj;}let result = f1();console.log(result.inc());//1console.log(result.inc());//2console.log(result.inc());//3

在返回的對象中,實現了一個閉包,該閉包攜帶了局部變量x,并且,從外部代碼根本無法訪問到變量x。

方法2:

function f1() { var sum = 0; function f2() { sum++; return f2; } f2.valueOf = function () { return sum; }; f2.toString = function () { return sum+’’; }; return f2;}//執行函數f1,返回的是函數f2console.log(+f1());//0console.log(+f1()())//1console.log(+f1()()())//2

所有js數據類型都擁有valueOf和toString這兩個方法,null除外valueOf()方法:返回指定對象的原始值。toString()方法:返回對象的字符串表示。在數值運算中,優先調用了valueOf,字符串運算中,優先調用toStringsum+’ ’是一個字符串類型的數據

以上就是JavaScript 閉包的使用場景的詳細內容,更多關于JavaScript 閉包的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲国产成人精品女人| 国产 日韩 欧美 综合 一区| 日韩免费小视频| 国产精品777777在线播放 | av资源新版天堂在线| 久久婷婷国产| 成人国产精品久久| 97精品一区| 国产一区二区三区视频在线| 91视频久久| 久久国产影院| 亚洲高清影视| 蜜桃久久久久久| 日韩欧美中文在线观看| 青草av.久久免费一区| 久久狠狠亚洲综合| 久久av偷拍| 另类专区亚洲| 欧美成人综合| 免费在线观看一区二区三区| 中文字幕视频精品一区二区三区| 一区二区三区四区在线观看国产日韩 | 日韩av网站免费在线| 欧美另类中文字幕| 精品视频97| 久久免费高清| 一区二区三区四区日韩| 国产欧美欧美| 97精品中文字幕| av成人国产| 日韩精品久久理论片| 欧美激情五月| 欧美亚洲国产激情| 日韩高清电影免费| 岛国av免费在线观看| 狠狠爱成人网| 日韩精选在线| 国产一区二区亚洲| 精品一区欧美| 啪啪亚洲精品| 在线观看精品| 亚洲三区欧美一区国产二区| 免费精品一区| 五月天久久777| 91av一区| 999国产精品999久久久久久| 亚洲综合小说| 国产suv精品一区二区四区视频| 亚州av乱码久久精品蜜桃| 日韩av中文字幕一区二区| a天堂资源在线| 亚洲精品1区| 国产精品99久久久久久董美香| 蜜桃精品在线| 日韩一区二区三区精品| 岛国av在线网站| 亚洲一区导航| 都市激情国产精品| 中文字幕中文字幕精品| a国产在线视频| 日本在线不卡视频| 一本大道色婷婷在线| 日韩精品1区2区3区| 日本综合字幕| 国产免费av一区二区三区| 国产一区亚洲| 国产乱人伦丫前精品视频| 蜜臀久久99精品久久一区二区 | 只有精品亚洲| 日本不卡免费高清视频在线| 亚洲一级大片| 欧美综合另类| 精品国产一级| 亚洲精品乱码日韩| 日韩不卡免费高清视频| 清纯唯美亚洲综合一区| 亚洲精品网址| 国产h片在线观看| 国产丝袜一区| 亚洲主播在线| 国产aⅴ精品一区二区四区| 日韩和欧美的一区| 欧美在线影院| 蜜桃精品在线| 精品久久久中文字幕| 日韩国产一区二| 中日韩男男gay无套| 日韩中文在线电影| 你懂的国产精品| 日韩一区二区三免费高清在线观看| 天堂网av成人| 大香伊人久久精品一区二区| 91精品福利观看| 亚洲色图网站| 亚洲欧美日韩国产| 色综合www| 岛国精品一区| 美女免费视频一区| 欧美视频二区| 奇米狠狠一区二区三区| 亚洲精品日韩久久| 模特精品在线| 一区二区自拍| 日韩午夜在线| 欧美精品一二| 1024精品一区二区三区| 日韩欧美二区| 中文字幕色婷婷在线视频| 精品欧美日韩精品| 国产精品啊啊啊| 日本成人手机在线| 亚洲精品国模| 亚洲网址在线观看| 亚洲男女自偷自拍| 亚洲一区日韩| 热久久国产精品| 蜜臀av一区二区三区| 国产亚洲欧洲| 噜噜噜躁狠狠躁狠狠精品视频| 国产综合亚洲精品一区二| 欧美成人基地 | 亚洲在线观看| 丝袜美腿亚洲一区二区图片| 午夜久久tv| 99国产精品久久久久久久| 午夜欧美精品久久久久久久| 黑丝一区二区三区| 999在线观看精品免费不卡网站| 蜜桃成人av| 国产亚洲在线| 亚洲精选91| 日本欧美久久久久免费播放网| 91麻豆精品激情在线观看最新| 18国产精品| 国产劲爆久久| 激情不卡一区二区三区视频在线| 国产伊人久久| 日韩一区二区三区免费播放| 成人亚洲一区| 成人日韩在线观看| 欧美国产91| 亚洲精品一级| 国产精品一区二区三区四区在线观看| 久久不卡国产精品一区二区| 国产不卡一区| 欧美中文一区二区| 久久国产99| 91欧美日韩在线| 国精品产品一区| 欧美日韩水蜜桃| 首页欧美精品中文字幕| 日本免费一区二区视频| 麻豆中文一区二区| 亚洲精品永久免费视频| 激情婷婷亚洲| 亚洲区国产区| 美女av一区| 久久中文字幕二区| 中文字幕av一区二区三区人| 欧美日韩一区自拍| 伊人网在线播放| 亚洲永久字幕| 国产精品亚洲欧美| 日韩在线看片| 亚洲丝袜啪啪| 免费亚洲婷婷| 亚洲性图久久| 日韩av资源网| 国产在线视频欧美一区| 免费久久精品| 日韩av中文字幕一区二区| 精品日产乱码久久久久久仙踪林| 欧美亚洲国产精品久久| 日韩成人精品一区二区三区| zzzwww在线看片免费| 国产精品免费看| 国产精品白丝一区二区三区| 亚洲一级网站| 国产精品亚洲一区二区在线观看| 日韩精品影视| 日韩成人午夜精品| 蜜桃视频在线网站| 天使萌一区二区三区免费观看| 日精品一区二区三区| 成人在线免费观看91| 香蕉久久国产| 久久久久久色| 亚洲夜间福利| 国产欧美日韩精品一区二区三区| 91精品国产成人观看| 青青青国产精品| 国产精品91一区二区三区| 国产日韩一区| 一区三区视频| 国产一区二区三区久久| 亚洲精品无吗| 精品欧美一区二区三区在线观看| 日日夜夜免费精品视频| 日韩理论视频| 欧美一区免费|