成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 閉包實踐

開發 前端
通過深入了解 JavaScript 的高級概念之一:閉包,更好地理解 JavaScript 代碼的工作和執行方式。

[[382714]]

通過深入了解 JavaScript 的高級概念之一:閉包,更好地理解 JavaScript 代碼的工作和執行方式。

在《JavaScript 如此受歡迎的 4 個原因》中,我提到了一些高級 JavaScript 概念。在本文中,我將深入探討其中的一個概念:閉包closure

根據 Mozilla 開發者網絡(MDN),“閉包是將一個函數和對其周圍的狀態(詞法環境)的引用捆綁在一起(封閉)的組合。”簡而言之,這意味著在一個函數內部的函數可以訪問其外部(父)函數的變量。

為了更好地理解閉包,可以看看作用域及其執行上下文。

下面是一個簡單的代碼片段:

  1. var hello = "Hello";
  2.  
  3. function sayHelloWorld() {
  4. var world = "World";
  5.     function wish() {
  6.         var year = "2021";
  7.         console.log(hello + " " + world + " "+ year);
  8. }
  9. wish();
  10. }
  11. sayHelloWorld();

下面是這段代碼的執行上下文:

 

JS 代碼的執行上下文

每次創建函數時(在函數創建階段)都會創建閉包。每個閉包有三個作用域。

  • 本地作用域(自己的作用域)
  • 外部函數范圍
  • 全局范圍

我稍微修改一下上面的代碼來演示一下閉包:

  1. var hello = "Hello";
  2.  
  3. var sayHelloWorld = function() {
  4. var world = "World";
  5.     function wish() {
  6.         var year = "2021";
  7.         console.log(hello + " " + world + " "+ year);
  8. }
  9. return wish;
  10. }
  11. var callFunc = sayHelloWorld();
  12. callFunc();

內部函數 wish() 在執行之前就從外部函數返回。這是因為 JavaScript 中的函數形成了閉包

  • 當 sayHelloWorld 運行時,callFunc 持有對函數 wish 的引用。
  • wish 保持對其周圍(詞法)環境的引用,其中存在變量 world

私有變量和方法

本身,JavaScript 不支持創建私有變量和方法。閉包的一個常見和實用的用途是模擬私有變量和方法,并允許數據隱私。在閉包范圍內定義的方法是有特權的。

這個代碼片段捕捉了 JavaScript 中閉包的常用編寫和使用方式:

  1. var resourceRecord = function(myName, myAddress) {
  2.   var resourceName = myName;
  3.   var resourceAddress = myAddress;
  4.   var accessRight = "HR";
  5.   return {
  6.     changeName: function(updateName, privilege) {
  7.       // only HR can change the name
  8.       if (privilege === accessRight ) {
  9.         resourceName = updateName;
  10.         return true;
  11.       } else {
  12.         return false;
  13.       }
  14.     },  
  15.     changeAddress: function(newAddress) {
  16.       // any associate can change the address
  17.       resourceAddress = newAddress;          
  18.     },  
  19.     showResourceDetail: function() {
  20.       console.log ("Name:" + resourceName + " ; Address:" + resourceAddress);
  21.     }
  22.   }
  23. }
  24. // Create first record
  25. var resourceRecord1 = resourceRecord("Perry","Office");
  26. // Create second record
  27. var resourceRecord2 = resourceRecord("Emma","Office");
  28. // Change the address on the first record
  29. resourceRecord1.changeAddress("Home");
  30. resourceRecord1.changeName("Perry Berry", "Associate"); // Output is false as only an HR can change the name
  31. resourceRecord2.changeName("Emma Freeman", "HR"); // Output is true as HR changes the name
  32. resourceRecord1.showResourceDetail(); // Output - Name:Perry ; Address:Home
  33. resourceRecord2.showResourceDetail(); // Output - Name:Emma Freeman ; Address:Office

資源記錄(resourceRecord1 和 resourceRecord2)相互獨立。每個閉包通過自己的閉包引用不同版本的 resourceName 和 resourceAddress 變量。你也可以應用特定的規則來處理私有變量,我添加了一個誰可以修改 resourceName 的檢查。

使用閉包

理解閉包是很重要的,因為它可以更深入地了解變量和函數之間的關系,以及 JavaScript 代碼如何工作和執行。

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-10-14 15:15:28

JavaScript(

2011-05-25 14:48:33

Javascript閉包

2017-09-14 13:55:57

JavaScript

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉

2012-11-29 10:09:23

Javascript閉包

2010-06-23 10:24:42

Javascript閉

2017-05-22 16:08:30

前端開發javascript閉包

2021-01-13 11:25:12

JavaScript閉包函數

2016-09-18 20:53:16

JavaScript閉包前端

2009-03-17 15:36:29

JavaScript循環事件

2011-03-02 12:33:00

JavaScript

2011-05-12 18:26:08

Javascript作用域

2011-05-30 14:41:09

Javascript閉

2024-01-22 09:51:32

Swift閉包表達式尾隨閉包

2021-12-06 07:15:48

Javascript作用域閉包

2023-10-26 07:47:35

JavaScript代碼變量

2019-07-09 10:43:57

JavaScriptWeb前端

2011-08-03 08:59:46

JavaScript

2015-12-22 11:48:50

javascript閉包
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品美女视频在免费观看 | www.精品一区 | 在线观看视频福利 | 欧美精品一区二区免费 | 欧美伦理一区 | 午夜影视网 | 久久精品中文字幕 | 91天堂| 欧美一级二级视频 | 婷婷91 | 精品一区国产 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 毛片一区二区三区 | 成人精品久久日伦片大全免费 | 免费同性女女aaa免费网站 | 国精日本亚洲欧州国产中文久久 | 中文字幕av色 | 免费av手机在线观看 | 色婷婷久久久亚洲一区二区三区 | 欧产日产国产精品99 | 男女免费观看在线爽爽爽视频 | 日韩在线视频网址 | 黑人巨大精品欧美一区二区免费 | 久久久久久免费看 | 日韩精品一区二区三区中文在线 | 日韩视频免费看 | 日韩精品一区二区三区中文字幕 | 中文字幕在线一区二区三区 | 福利片在线| 日韩在线不卡视频 | 激情久久网 | 伊人网在线看 | 亚洲视频一区二区三区 | 亚洲精品福利视频 | 亚洲精品一区二区三区蜜桃久 | 国产成人在线播放 | 九色国产 | 久久久久久久久淑女av国产精品 | 成人做爰69片免费观看 | 在线一区 | 久久久国产精品 |