日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScript閉包實(shí)踐

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

在樂山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),樂山網(wǎng)站建設(shè)費(fèi)用合理。

在《JavaScript 如此受歡迎的 4 個(gè)原因》中,我提到了一些高級(jí) JavaScript 概念。在本文中,我將深入探討其中的一個(gè)概念:閉包c(diǎn)losure。

根據(jù) Mozilla 開發(fā)者網(wǎng)絡(luò)(MDN),“閉包是將一個(gè)函數(shù)和對(duì)其周圍的狀態(tài)(詞法環(huán)境)的引用捆綁在一起(封閉)的組合。”簡(jiǎn)而言之,這意味著在一個(gè)函數(shù)內(nèi)部的函數(shù)可以訪問其外部(父)函數(shù)的變量。

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

下面是一個(gè)簡(jiǎn)單的代碼片段:

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

下面是這段代碼的執(zhí)行上下文:

JS 代碼的執(zhí)行上下文

每次創(chuàng)建函數(shù)時(shí)(在函數(shù)創(chuàng)建階段)都會(huì)創(chuàng)建閉包。每個(gè)閉包有三個(gè)作用域。

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

我稍微修改一下上面的代碼來(lái)演示一下閉包:

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

內(nèi)部函數(shù) wish() 在執(zhí)行之前就從外部函數(shù)返回。這是因?yàn)?JavaScript 中的函數(shù)形成了閉包。

  • 當(dāng) sayHelloWorld 運(yùn)行時(shí),callFunc 持有對(duì)函數(shù) wish 的引用。
  • wish 保持對(duì)其周圍(詞法)環(huán)境的引用,其中存在變量 world

私有變量和方法

本身,JavaScript 不支持創(chuàng)建私有變量和方法。閉包的一個(gè)常見和實(shí)用的用途是模擬私有變量和方法,并允許數(shù)據(jù)隱私。在閉包范圍內(nèi)定義的方法是有特權(quán)的。

這個(gè)代碼片段捕捉了 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)相互獨(dú)立。每個(gè)閉包通過(guò)自己的閉包引用不同版本的 resourceName 和 resourceAddress 變量。你也可以應(yīng)用特定的規(guī)則來(lái)處理私有變量,我添加了一個(gè)誰(shuí)可以修改 resourceName 的檢查。

使用閉包

理解閉包是很重要的,因?yàn)樗梢愿钊氲亓私庾兞亢秃瘮?shù)之間的關(guān)系,以及 JavaScript 代碼如何工作和執(zhí)行。


分享文章:JavaScript閉包實(shí)踐
URL標(biāo)題:http://m.5511xx.com/article/dhgdojg.html