92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

函數作用域和立即執行函數

2021-9-17    前端達人

變量作用域

  • JavaScript是函數級作用域編程語言:變量只在其定義時所在的function內部有意義。

全局變量

  • 如果不將變量定義在任何函數的內部,此時這個變量就是全局變量,它在任何函數內都可以被訪問和更改。

遮蔽效應

  • 如果函數中也定義了和全局同名的變量,則函數內的變量會將全局的變量“遮蔽”。

注意考慮變量聲明提升的情況

  • 這個程序的運行結果是什么呢?

形參也是局部變量

  • 這個程序的運行結果是什么呢?

局部函數

  • 先來認識函數的嵌套:一個函數內部也可以定義一個函數。和局部變量類似,定義在一個函數內部的函數是局部函數。

作用域鏈

  • 在函數嵌套中,變量會從內到外逐層尋找它的定義。

不加var將定義全局變量

  • 在初次給變量賦值時,如果沒有加var,則將定義全局變量。

什么是閉包

  • JavaScript中函數會產生閉包(closure)。閉包是函數本身和該函數聲明時所處的環境狀態的組合。

  •  函數能夠“記憶住”其定義時所處的環境,即使函數不在其定義的環境中被調用,也能訪問定義時所處環境的變量。

觀察閉包現象

  • 在JavaScript中,每次創建函數時都會創建閉包。
  • 但是,閉包特性往往需要將函數“換一個地方”執行,才能被觀察出來。

閉包非常實用

  • 閉包很有用,因為它允許我們將數據與操作該數據的函數關聯起來。這與“面向對象編程”有少許相似之處。
  • 閉包的功能:記憶性、模擬私有變量。

閉包用途1 - 記憶性 

  • 當閉包產生時,函數所處環境的狀態會始終保持在內存中,不會在外層函數調用后被自動清除。這就是閉包的記憶性。

閉包的記憶性舉例

  • 創建體溫檢測函數checkTemp(n),可以檢查體溫n是否正常,函數會返回布爾值。
  • 但是,不同的小區有不同的體溫檢測標準,比如A小區體溫合格線是37.1℃,而B小區體溫合格線是37.3℃,應該怎么編程呢?

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. function createCheckTemp(standardTemp) {
  11. function checkTemp(n) {
  12. if (n <= standardTemp) {
  13. console.log('你的體溫正常');
  14. } else {
  15. console.log('你的體溫偏高');
  16. }
  17. }
  18. return checkTemp;
  19. }
  20. // 創建一個checkTemp函數,它以37.1度為標準線
  21. var checkTemp_A = createCheckTemp(37.1);
  22. // 再創建一個checkTemp函數,它以37.3度為標準線
  23. var checkTemp_B = createCheckTemp(37.3);
  24. checkTemp_A(37.2);
  25. checkTemp_B(37.2);
  26. </script>
  27. </body>
  28. </html>

閉包用途2 - 模擬私有變量

  • 在Java、C++等語言中,有私有屬性的概念,但是JavaScript中只能用閉包來模擬。

  • 題目:請定義一個變量a,要求是能保證這個a只能被進行指定操作(如加1、乘2),而不能進行其他操作,應該怎么編程呢?

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 封裝一個函數,這個函數的功能就是私有化變量
  11. function fun() {
  12. // 定義一個局部變量a
  13. var a = 0;
  14. return {
  15. getA: function () {
  16. return a;
  17. },
  18. add: function () {
  19. a++;
  20. },
  21. pow: function () {
  22. a *= 2;
  23. }
  24. };
  25. }
  26. var obj = fun();
  27. // 如果想在fun函數外面使用變量a,唯一的方法就是調用getA()方法
  28. console.log(obj.getA());
  29. // 想讓變量a進行加1操作
  30. obj.add();
  31. obj.add();
  32. obj.add();
  33. console.log(obj.getA());
  34. obj.pow();
  35. console.log(obj.getA());
  36. </script>
  37. </body>
  38. </html>

使用閉包的注意點

  • 不能濫用閉包,否則會造成網頁的性能問題,嚴重時可能導致內存泄露。
  • 所謂內存泄漏是指程序中己動態分配的內存由于某種原因未釋放或無法釋放。

立即執行函數IIFE

  • IIFE(Immediately Invoked Function Expression,立即調用函數表達式)是一種特殊的JavaScript函數寫法,一旦被定義,就立即被調用。

形成IIFE的方法

  • 函數不能直接加圓括號被調用。

  • 函數必須轉為“函數表達式”才能被調用。

IIFE的作用1 - 為變量賦值

  • 為變量賦值:當給變量賦值需要一些較為復雜的計算時(如if語句),使用IIFE顯得語法更緊湊。

IIFE的作用2-將全局變量變為局部變量

  • IIFE可以在一些場合(如for循環中)將全局變量變為局部變量,語法顯得緊湊。








藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

分享此文一切功德,皆悉回向給文章原作者及眾讀者.

轉自:csdn
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

藍藍設計www.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
久久夜色精品亚洲噜噜国产mv| 欧美精品免费播放| 97视频人免费观看| 尤物yw午夜国产精品视频| 疯狂蹂躏欧美一区二区精品| 久久久久久久电影一区| 亚洲第一福利视频| 亚洲一区二区三区四区在线播放| 97婷婷涩涩精品一区| 久久在线免费视频| 精品无人区乱码1区2区3区在线| 欧美极品在线视频| 久久99国产精品自在自在app| 亚洲高清一区二| 日本亚洲欧洲色α| 国产日韩精品综合网站| 欧美放荡办公室videos4k| 伊人av综合网| 欧美激情国内偷拍| 欧美自拍视频在线| 午夜精品久久久久久久男人的天堂| 成人黄在线观看| 欧美激情综合亚洲一二区| 91精品久久久久久久久青青| 欧美高清自拍一区| 国产精品网站视频| 欧美有码在线观看| 日本亚洲欧洲色α| 91精品视频网站| 色综合久久悠悠| 一区国产精品视频| 欧美洲成人男女午夜视频| 97久久久免费福利网址| 粗暴蹂躏中文一区二区三区| 亚洲国产高清福利视频| 日韩一区视频在线| 日韩中文字幕国产精品| 国产精品老牛影院在线观看| 国产精品一区二区三区久久久| 欧美精品成人在线| 亚洲国产中文字幕久久网| 国产a∨精品一区二区三区不卡| 欧美做受高潮电影o| 日韩欧美999| 国产亚洲精品综合一区91| 欧美天堂在线观看| 国产玖玖精品视频| 久久久久999| 成人高h视频在线| 4438全国亚洲精品在线观看视频| 久久久久国产精品免费网站| 自拍偷拍亚洲区| 亚洲伊人久久大香线蕉av| 精品久久久久人成| 一本色道久久综合狠狠躁篇的优点| 欧美亚洲一区在线| 亚洲理论片在线观看| 91网站免费看| 2021久久精品国产99国产精品| 亚洲精品日产aⅴ| www.精品av.com| 欧美性猛交xxxx免费看| 91精品国产成人www| 国产精品久久激情| 亚洲深夜福利网站| 久久全国免费视频| 国产精品成人一区二区三区吃奶| 久久精品这里热有精品| 精品性高朝久久久久久久| 丝袜亚洲另类欧美重口| 久久久久久久久久久国产| 欧美成人激情视频免费观看| 亚洲第一视频网站| 日韩va亚洲va欧洲va国产| 久久久精品在线观看| 2018国产精品视频| 疯狂蹂躏欧美一区二区精品| 91精品国产综合久久男男| 成人免费视频a| 性色av一区二区三区免费| 国产精品一久久香蕉国产线看观看| 亚洲成人久久一区| 北条麻妃99精品青青久久| 亚洲自拍偷拍第一页| 欧美国产日韩精品| 国产色综合天天综合网| 欧美日在线观看| 91久久精品视频| 亚洲日本成人女熟在线观看| 精品国产1区2区| 国产亚洲精品一区二555| 日韩午夜在线视频| 日韩精品亚洲视频| 91精品在线看| 国产精品第三页| 欧美性69xxxx肥| 川上优av一区二区线观看| 九九热这里只有在线精品视| 日韩最新av在线| 日本精品一区二区三区在线播放视频| 成人444kkkk在线观看| 国产精品女视频| 在线看欧美日韩| 在线观看免费高清视频97| 亚洲福利视频久久| 欧美黑人一级爽快片淫片高清| 91干在线观看| 国模私拍一区二区三区| 日韩成人中文电影| 亚洲人成在线免费观看| 欧美日韩xxx| 欧美日韩国产综合视频在线观看中文| 亚洲国产天堂网精品网站| 久久久人成影片一区二区三区观看| 欧美一级高清免费播放| 国产91在线播放| 91久久夜色精品国产网站| 91久久精品美女高潮| 国产精品午夜视频| 欧美国产在线电影| 色无极亚洲影院| 国产成人精品在线播放| 国产精品www| 久久99久久99精品中文字幕| www.欧美三级电影.com| 成人黄色激情网| 欧美成人免费网| 亚洲欧美综合另类中字| 亚洲第一免费播放区| 国产成人久久久| 91精品久久久久久久久久久久久| 国产在线播放91| 日韩激情av在线播放| 日韩国产欧美区| 日韩av三级在线观看| 亚洲精品国精品久久99热| 国产亚洲欧美日韩一区二区| 精品久久香蕉国产线看观看gif| 热99精品只有里视频精品| 88国产精品欧美一区二区三区| 久久精品99久久久久久久久| 久久久久久久久久久av| 亚洲色图国产精品| 亚洲精品久久久久国产| 岛国av在线不卡| 96国产粉嫩美女| 国产日韩中文在线| 5278欧美一区二区三区| 欧美一级免费视频| 午夜精品福利电影| 欧美国产中文字幕| 国产精品成人va在线观看| www.日韩欧美| 成人啪啪免费看| 性欧美在线看片a免费观看| 亚洲国产精品悠悠久久琪琪| 亚洲男人第一网站| 久久在精品线影院精品国产| 日韩成人在线观看| 91香蕉嫩草神马影院在线观看| 中文字幕精品国产| 日韩av免费在线观看| 亚洲第一视频在线观看| 国产精品久久久久久影视|