天天看點

jQuery閉包了解

參考https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/

閉包定義-是指有權通路另一個函數作用域中的變量的函數。

讓這些變量的值始終保持在記憶體中。

閉包就是能夠讀取其他函數内部變量(局部變量)的函數

使用場景——函數作為傳回值,函數作為參數傳遞。

傳回值

jQuery閉包了解
 參數傳遞
jQuery閉包了解

上面的寫法其實是最原始的寫法,而在實際應用中,會将閉包和匿名函數聯系在一起使用

形成閉包要符合這三個條件,而且三者缺一不可:

  • 1、函數A内部直接或間接傳回一個函數B
  • 2、B函數内部使用着A函數的私有變量
  • 3、A函數外部有一個變量接收B函數

 閉包主要的三個特點

  • 1、延長了變量的生命周期;這個特點的好處就是變量會一直存在,
  • 是以也成了一個緻命的缺點:就是這個函數的執行空間不會被銷毀,而當一段記憶體空間中有一個不會被銷毀的東西一直存在,就會出現記憶體占用,如果過多的話,還會導緻記憶體溢出,結果引起記憶體洩漏。
  • 2、可以通路函數内部的私有變量;利用這個特點,我們可以在函數外部通路到内部的資料。
  • 3、保護私有變量;這是所有函數都具備的特點之一,普通函數的内部變量是不能在外部通路的,但是閉包空間可以。

匿名函數主要有兩種常用的場景,一是回調函數,二是直接執行函數。

()()這種寫法可以說是匿名函數的調用或者叫立即執行函數。

<script language="javascript">
var a = "a";
(function(){
    var a="b";
    alert(a);
})();
alert(a);
</script>

Function 對象是JavaScript 裡面的固有對象,所有的函數實際上都是一個Function 對象。      
var abc = new Function("x","y","return x*y;"); 
alert(abc(2,3)); // "6"

聲明匿名函數---匿名函數就是沒有實際名字的函數。      
var abc=function(x,y){ 
return x+y; 
} 
alert(abc(2,3)); // "5"      
立即執行函數:形如          (function(){})();                的一類函數;      

  立即執行函數的兩種寫法

  • (function(){}()); W3C 建議第一種
  • (function(){})();
jQuery閉包了解

出處:轉載請注明 https://www.cnblogs.com/sun-null/

上一篇: 程序和線程
下一篇: 資料庫設計