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
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

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

日歷

鏈接

個人資料

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

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
成人精品水蜜桃| 粗大黑人巨茎大战欧美成人| 日韩av一区二区三区| 精品久久久网| 国产亚洲精品一区二区| 精品久久久久久久久国产字幕| 精品国产_亚洲人成在线| 久热国产精品视频| 亚洲精品电影网在线观看| 真实国产乱子伦精品一区二区三区| 国产成人av一区二区三区| 欧美gvvideo网站| 欧美亚洲自偷自偷| 亚洲国产精品大全| 一本色道精品久久一区二区三区| 国产拍欧美日韩视频二区| 久久精品一二三| 国产成人亚洲精品| 国产91精品视频在线观看| 精品国产99国产精品| 91精品国产91久久| 亚洲国产岛国毛片在线| 国产日韩欧美一区二区| 91久久久久久国产精品| 亚洲精品一二三| 国产伦精品一区二区三区照片| 色综合一区二区日本韩国亚洲| 亚洲欧美日韩综合aⅴ视频| 成人性生交大片免费看视频在线| 懂色av一区二区三区免费观看| 一区二区在线观看视频| 中国色在线观看另类| 亚洲国产精品成人综合| 毛片在线看片| 日本一区二区三区四区高清视频| 456成人影院在线观看| 丁香花电影在线观看完整版| 亚洲免费专区| 欧美性猛交xxxx黑人交| 日韩一级黄色av| 午夜视频在线观看精品中文| 一区二区亚洲| 日本一区二区三区高清不卡| 久久99精品久久久久久| 黑人与娇小精品av专区| 678在线观看视频| 自拍偷自拍亚洲精品播放| 国产一区免费在线| 免费看精品久久片| 久久精品女人天堂av免费观看| 午夜久久久久久久久久一区二区| 一区二区三区四区在线| 日韩欧美在线免费观看| 亚洲欧美日韩中文播放| 一区二区三区免费在线观看| 国产在线观看免费麻豆| 欧美国产激情二区三区| 欧美精品福利视频| 成年人视频网站在线| 精品久久不卡| 神马香蕉久久| 国产99午夜精品一区二区三区| 日韩av中字| 亚洲精品四区| 中文字幕一区在线观看| 久久精品视频免费播放| 亚洲电影免费| 久久亚洲春色中文字幕久久久| 国产精品久久久久久亚洲毛片| 欧美激情啊啊啊| 色久欧美在线视频观看| 亚洲国产一区二区三区四区| 亚洲成av人片在线观看www| 四虎4545www国产精品| 亚洲免费影院| gratisvideos另类灌满| 亚洲精品福利电影| 99riav国产精品| 欧美男男video| 久久国产精品免费视频| 操你啦在线视频| 激情欧美国产欧美| 国产精品电影久久久久电影网| 在线欧美亚洲| 黑人欧美xxxx| 欧美午夜精品伦理| 欧美日韩免费电影| 欧美成人三级在线| japanese色系久久精品| 亚洲精品电影久久久| 中文字幕av一区 二区| 欧美久久综合性欧美| 一区二区三区四区中文字幕| 精品视频一区二区三区四区五区| 国产在线一区二区| 精品欧美久久久| 成人女人免费毛片| 99re视频在线观看| 国产成人精品一区二区三区免费| 91嫩草国产在线观看| 在线观看的黄色| 久久er热在这里只有精品66| 成人天堂噜噜噜| 欧美18xxxx| 青青影院在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美久久久精品| 国产精品一区hongkong| 欧美三区视频| 日本精品视频在线播放| 老鸭窝亚洲一区二区三区| 欧美日韩精品是欧美日韩精品| 日韩pacopacomama| 国产精自产拍久久久久久| 免费日韩一区二区三区| 青草视频在线免费直播| 午夜激情电影在线播放| 日韩精品成人在线观看| 欧美猛男做受videos| 超碰97人人做人人爱少妇| 亚洲色图二区| 欧美三级日韩三级国产三级| 久久wwww| 亚洲区小说区图片区qvod| 婷婷综合伊人| 一本在线高清不卡dvd| 少妇精品视频一区二区免费看| 亚洲春色在线视频| 亚洲女同一区二区| 乱人伦精品视频在线观看| 欧美性xxxxxx少妇| 91在线视频18| 欧美人在线观看| av高清一区| 久久伊人一区二区| 污视频网站在线免费| 激情偷乱视频一区二区三区| 亚洲热线99精品视频| 午夜视频一区二区三区| 欧美在线观看18| av在线播放一区二区| 精品高清久久| 伊人久久视频| 狠狠色丁香九九婷婷综合五月| 久久影院午夜片一区| 亚洲女同女同女同女同女同69| 激情综合五月天| 欧美在线国产| jvid一区二区三区| 九九热爱视频精品视频| www国产91| 秋霞伦理一区| 国产精品久久一区二区三区| 国产亚洲视频在线观看| 日韩男女性生活视频| 免费福利视频一区| 欧洲s码亚洲m码精品一区| 欧美久久久久久蜜桃| 国外色69视频在线观看| 麻豆视频观看网址久久| 欧洲日本在线| 国产成+人+综合+亚洲欧美| 91精品一区二区| 中文字幕综合在线|