亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

JavaScript

javascript閉包的定義及應(yīng)用實(shí)例分析

時(shí)間:2024-04-21 04:39:02 JavaScript 我要投稿
  • 相關(guān)推薦

javascript閉包的定義及應(yīng)用實(shí)例分析

  官方解釋

  “閉包”是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是環(huán)境表達(dá)式的一部分。

  通俗解釋

  Javascript中所有的函數(shù)都是一個(gè)閉包。不過一般來說,嵌套的function產(chǎn)生的閉包更為強(qiáng)大,也是大部分時(shí)候我們所說的“閉包”?慈缦麓a:

  復(fù)制代碼 代碼如下:

  這段腳本在執(zhí)行完var c=a()之后,變量c實(shí)際上就指向了函數(shù)b,b中用到了變量i,再執(zhí)行c()后就會(huì)彈出一個(gè)窗口顯示i的值。這段代碼其實(shí)就是一個(gè)閉包,為什么?因?yàn)楹瘮?shù)a外的變量c引用了函數(shù)a內(nèi)部的函數(shù)b。

  Javascript的垃圾回收機(jī)制

  由于javascript特殊的垃圾回收機(jī)制,才導(dǎo)致了閉包的產(chǎn)生。Javascript垃圾回收機(jī)制的大體規(guī)則如下:

  在javascript中,如果一個(gè)對(duì)象不再被引用,那么這個(gè)對(duì)象就會(huì)被GC回收。如果兩個(gè)對(duì)象相互引用,而不再被第3者引用,那么這兩個(gè)互相引用的對(duì)象也會(huì)被回收。而在上述的腳本中,函數(shù)a被b引用,函數(shù)b又被函數(shù)a外的c所引用,這就是為什么函數(shù)a執(zhí)行后不被回收的原因。

  閉包的應(yīng)用場景

  1. 保護(hù)函數(shù)內(nèi)的變量安全。以上面的例子為例,函數(shù)a中變量i只有函數(shù)b才能訪問,而無法通過其他途徑訪問到,因此保護(hù)了i的安全性。

  2. 在內(nèi)存中維持一個(gè)變量。依然如上面的例子,由于閉包,函數(shù)a中的i一直存在于內(nèi)存中,因此每次執(zhí)行c(),i都會(huì)加1。

  3. 通過保護(hù)變量的安全實(shí)現(xiàn)JS私有屬性和私有方法(不能被外部訪問)。如下,私有屬性和私有方法在Constructor外是無法訪問的:

  復(fù)制代碼 代碼如下:

  function Constructor(…){

  var that = this;

  var membername = value;

  function membername(…){…}

  }

【javascript閉包的定義及應(yīng)用實(shí)例分析】相關(guān)文章:

針對(duì)dom元素的分析應(yīng)用07-16

如何調(diào)試javascript腳本呢07-19

javascript跨域訪問的方法07-19

兒童社會(huì)工作的定義03-06

硬盤邏輯故障解決方法實(shí)例07-16

excel中驗(yàn)算公式使用實(shí)例介紹12-08

公文寫作四個(gè)技巧及實(shí)例10-14

工程項(xiàng)目施工管理定義03-29

原生ajax調(diào)用數(shù)據(jù)實(shí)例簡單講解07-19

人的心理的本質(zhì)和心理學(xué)定義06-07