亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript使用閉包模仿塊級作用域操作示例

2019-11-19 12:14:30
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript使用閉包模仿塊級作用域操作。分享給大家供大家參考,具體如下:

在閱讀這篇文章之前,建議先閱讀JavaScript的作用域鏈以及JavaScript閉包。

正如閉包的定義一樣:“閉包指的是有權訪問另一個函數作用域中的變量的函數”, 閉包最大的意義就在于閉包可以對另一個函數作用域的變量進行訪問,由此,閉包可以延伸出一系列的用法。

模仿塊級作用域

JavaScript沒有塊級作用域的概念。這意味著在塊語句中定義的變量,實際上是包含在函數中而非語句中創建的。從作用域鏈的角度來理解是,所有在函數內定義的變量(所有,也就是說塊語句中定義的變量也包含在內)都會在這個函數執行時所創建的函數的活動對象中,因此從函數內的所有變量定義開始,就可以在函數內部隨處訪問它,閉包也可以通過作用域鏈訪問它。
例子:

function outputNumbers(count){  for(var i = 0; i < count; i++){    console.log(i); // 0, 1, ... count - 1  }  console.log(i); // count}

C++, JAVA等語言中,變量i只會在for循環的語句塊(block)中有定義,循環一旦結束,變量i就會被銷毀。可是在JavaScript中,變量i是定義在outputNumbers()的活動對象中,因此從函數內的所有變量定義開始,就可以在函數內部隨處訪問它,閉包也可以通過作用域鏈訪問它。即使像下面這樣重新聲明同一個變量,也不會改變它的值。

function outputNumbers(count){  for(var i = 0; i < count; i++){    console.log(i); // 0, 1, ... count - 1  }  var i;     // redeclare i  console.log(i); // count}

JavaScript從來不管是否多次聲明了同一個變量;遇到這種情況,JavaScript只會對后續的聲明視而不見(不過會執行后續聲明中的變量初始化),將其當成一個賦值語句。

函數包裝器可以用來模仿塊作用域并避免這個問題。

函數包裝器就是創建并立即調用一個函數。

(function(){  console.log("Hello World!");})();

這段代碼直接輸出”Hello World”, 這就是一個函數包裝器。

函數包裝器的作用:

1. 立即執行函數中的代碼,又不會再內存中留下對該函數的引用;

2. 函數內部的所有變量都會被立即銷毀(除非將這些變量賦值給了包含作用域中的變量)。

當在函數內部使用函數包裝器的時候,此時函數包裝器就是一個閉包,有權訪問外部環境中的所有變量。

function outputNumbers(count){  (function(){    //塊級作用域    for(var i = 0; i < count; i++){      console.log(i); // 0, 1, ... count - 1    }  })();  console.log(i); // error}

在函數包裝器中可以訪問外部環境outputNumbers()的變量count,打印0, 1, … count - 1,但是在函數包裝器執行完畢之后,再訪問變量i就會拋出錯誤,因為i是在函數包裝器中定義的,outputNumbers()函數無法訪問。

無論在什么地方,如果只需要一些臨時變量,就可以使用塊級作用域!

使用函數包裝器這種閉包可以減少閉包過多占用內存的問題。因為沒有指向匿名函數的引用, 所以只要函數包裝器執行完畢,就可以立即銷毀其作用域鏈了。

函數包裝器這種技術經常在全局作用域中被用在函數外部,從而限制想全局作用域中添加過多的變量和函數。一般來說,我們都應該盡量少向全局作用域中添加變量和函數。過多的全局變量和函數很容易導致命名沖突。通過創建塊級作用域,每個開發人員既可以使用自己的變量,有不必擔心搞亂全局作用域。例如:

(function(){  var now = new Date();  if (now.getMonth() == 0 && now.getDate() == 1) {    console.log("Happy new year");  }})();

將這段代碼放在全局作用域中,可以用來確定哪天是一月一日。其中變量now現在是匿名函數中的局部變量,避免了在全局變量中創建。

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色短视频在线观看| 亚洲欧美日韩久久久久久| 亚洲加勒比久久88色综合| 68精品久久久久久欧美| 91九色国产视频| 91精品国产一区| 中文字幕不卡在线视频极品| 国产91精品久久久| 国产精品视频精品| 97久久精品视频| 最新的欧美黄色| 亚洲在线免费观看| 国产在线观看精品一区二区三区| 欧美高清不卡在线| 欧美色视频日本高清在线观看| 国产z一区二区三区| 欧美成人sm免费视频| 国产精品成人在线| 国产视频精品久久久| 97热精品视频官网| 一本一本久久a久久精品牛牛影视| 日韩精品亚洲视频| 日本三级久久久| 久久999免费视频| 日韩精品中文字幕有码专区| 国产中文字幕亚洲| 久久精品99久久香蕉国产色戒| 日韩av在线资源| 成人黄色免费看| 国产啪精品视频| 亚洲视频999| 亚洲国产一区自拍| 欧美日韩国产激情| 精品高清美女精品国产区| 国产精品爽爽爽爽爽爽在线观看| 久久免费视频网| 日韩激情av在线免费观看| 日韩中文字幕国产| 国产精品女人网站| 亚洲xxxx做受欧美| 亚洲午夜未满十八勿入免费观看全集| 亚洲午夜久久久久久久| 日韩视频精品在线| 日韩第一页在线| 欧美日韩国产在线看| 久久久国产在线视频| 成人av色在线观看| 日韩精品视频中文在线观看| 久久久久久久影视| 欧美日韩在线免费| 黑人狂躁日本妞一区二区三区| 久久精品国产亚洲| 6080yy精品一区二区三区| 性欧美办公室18xxxxhd| 亚洲在线免费观看| 亚洲a一级视频| 在线中文字幕日韩| 亚洲欧美一区二区三区在线| 国产成人综合精品| 国产这里只有精品| 久久精品国产电影| 国产亚洲日本欧美韩国| 久久视频精品在线| 91久久精品日日躁夜夜躁国产| 日韩极品精品视频免费观看| 久久中文精品视频| 成人激情视频小说免费下载| 精品久久久在线观看| 中文字幕日本欧美| 亚洲欧美精品suv| 国产精品日韩一区| 国产一区二区欧美日韩| 欧美性xxxx极品hd欧美风情| 亚洲综合色av| 国产手机视频精品| 成人黄色午夜影院| 国产精品久久久| 欧美在线观看一区二区三区| 亚洲free嫩bbb| 92看片淫黄大片看国产片| 美日韩丰满少妇在线观看| 97国产精品视频人人做人人爱| 97视频免费观看| 日韩精品高清在线| 欧美久久久精品| 久久免费视频网| 久久夜色撩人精品| 国产一区在线播放| 久久免费福利视频| 91久久综合亚洲鲁鲁五月天| 欧美最猛性xxxxx亚洲精品| 亚洲第一av网站| 国产精品久久久久久久久影视| 欧美日本啪啪无遮挡网站| 国语对白做受69| 最近中文字幕2019免费| 国产免费观看久久黄| 欧美人在线观看| 国产性猛交xxxx免费看久久| 高清欧美性猛交| 欧美一级片一区| 精品国内产的精品视频在线观看| 国产一区二区日韩精品欧美精品| 日韩av快播网址| 亚洲色图综合网| 成人午夜在线视频一区| 亚洲qvod图片区电影| 亚洲第一精品电影| 91香蕉嫩草神马影院在线观看| 欧美国产亚洲视频| 国外成人在线播放| 久久久久久国产三级电影| 一色桃子一区二区| 亚洲欧美国产精品va在线观看| 午夜精品久久久久久久久久久久| 亚洲国产女人aaa毛片在线| 精品一区二区三区四区| 国产成人综合精品在线| 日韩激情视频在线| 久久久黄色av| 日韩中文字幕在线视频播放| 亚洲精品美女在线| 最近2019中文字幕第三页视频| 日韩欧美主播在线| 国内精久久久久久久久久人| 日韩动漫免费观看电视剧高清| 国产精品视频播放| 九九热这里只有精品6| 韩国美女主播一区| 亚洲精品日韩av| 91精品国产成人| 91久久精品一区| 中文字幕亚洲欧美一区二区三区| xxx欧美精品| 亚洲福利在线观看| 国产午夜精品美女视频明星a级| 欧美视频精品一区| 欧美视频裸体精品| 欧美日韩国产精品一区二区不卡中文| 美日韩精品免费视频| 色妞在线综合亚洲欧美| 亚洲综合大片69999| 日韩欧美一区二区三区| 亚洲精品视频中文字幕| 欧美韩国理论所午夜片917电影| 黑人巨大精品欧美一区免费视频| 国产欧美精品一区二区| 亚洲人成在线免费观看| 在线中文字幕日韩| 欧美性xxxx| 亚洲美女精品久久| 九九热这里只有在线精品视| 97人洗澡人人免费公开视频碰碰碰| 久久精品亚洲热| 亚洲精品第一国产综合精品| 亚洲天堂色网站| 国产91九色视频| 久久精品影视伊人网| 日韩激情av在线免费观看| 亚洲最大av网| 欧美性20hd另类| 伊人亚洲福利一区二区三区| 久久成人精品一区二区三区| 热草久综合在线|