什麼是閉包?有哪些使用場景?優缺點是什麼?
一:什麼是閉包?
閉包就是能夠讀取其他函式內部變數的函式,說白了閉包就是個函式,只不過是處於其他函式內部而已。
由於在javascript中,只有函式內部的子函式才能讀取區域性變數,所以說,閉包可以簡單理解成“定義在一個函式內部的函式“。
所以,在本質上,閉包是將函式內部和函式外部連線起來的橋樑。
知乎大神說:閉包是指在 JavaScript 中,內部函式總是可以訪問其所在的外部函式中宣告的引數和變數,即使在其外部函式被返回(壽命終結)了之後。
二:用途是什麼?
1.訪問函式內部的變數
2.防止函式內部的變數執行完城後,被銷燬,使其一直儲存在記憶體中。
寫一個關於閉包的例子:
function outer(x) {
// 引數相當於區域性的變數
function inner(y) {
console.log(x + y);
}
return inner;
}
var closure = outer(3);
closure(7); // 輸出10
inner函式把自己內部的語句,和自己在宣告時所處的作用域一起封裝成了一個密閉的環境,我們就稱之為閉包。
函式本身就是一個閉包,函式在定義的時候,就能記住自己的外部環境和內部語句,每次執行的時候,會參考定義時的密閉環境。
關於閉包的用處的例子:看的MDN網站上的例子,講的非常清楚了
var makeCounter = function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
};
var Counter1 = makeCounter();
var Counter2 = makeCounter();
console.log(Counter1.value()); /* logs 0 */
Counter1.increment();
Counter1.increment();
console.log(Counter1.value()); /* logs 2 */
Counter1.decrement();
console.log(Counter1.value()); /* logs 1 */
console.log(Counter2.value()); /* logs 0 */
每次呼叫其中一個計數器時,通過改變這個變數的值,會改變這個閉包的詞法環境。然而在一個閉包內對變數的修改,不會影響到另外一個閉包中的變數。以這種方式使用閉包,提供了許多與物件導向程式設計相關的好處 —— 特別是資料隱藏和封裝。
缺點:
如果不是某些特定任務需要使用閉包,在其它函式中建立函式是不明智的,因為閉包在處理速度和記憶體消耗方面對指令碼效能具有負面影響。
實際專案應用:
封裝一個公共彈框,點選確定取消按鈕,會觸發退訂事件,呼叫退訂介面,成功之後還會重新整理列表。
彈框元件接受一個 確定按鈕的事件,OK引數。
如果 OK 不寫成箭頭函式,那麼裡面的this 指向的是OK 而不是vue ,就無法執行,methods 的方法,也可以 在外部
let _this = this;
ok: function() {
_this.exitOrder();
}
這麼寫也可以。
相關文章
- SSL代理是什麼?有哪些使用場景?
- NFC是什麼功能?有哪些使用場景?
- (1)微服務是什麼?它的優缺點有哪些?微服務
- 混合IT是什麼?基礎設施和優缺點有哪些?
- Python垃圾回收機制是什麼?有哪些優缺點?Python
- TF簽名是什麼?穩定性怎麼?有什麼優缺點?
- 什麼是CDN邊緣伺服器,有什麼優缺點?伺服器
- 開源是什麼意思?開源軟體優缺點有哪些?
- 伺服器虛擬化部署是什麼有什麼優缺點伺服器
- Linux中LVM的工作原理是什麼?優缺點有哪些?LinuxLVM
- 海外SSL代理是什麼?都有哪些使用場景?
- Python中什麼是閉包?閉包的好處是什麼?Python
- 閉包函式到底是什麼?有什麼用?函式
- [JS]什麼是閉包?JS
- 什麼是閉包陷阱?
- Linux中lvm分割槽是什麼?LVM優缺點有哪些?LinuxLVM
- javaScript面試題整理 --- 什麼是閉包,什麼是立即執行函式,它的作用是什麼?簡單說一下閉包的使用場景JavaScript面試題函式
- 【雲端計算】什麼是私有云?可提供哪些服務?缺點是什麼?
- HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?架構
- LoRa閘道器是什麼?有什麼應用場景?
- javascript中閉包是什麼JavaScript
- redis 持久化詳解,RDB和AOF是什麼?他們優缺點是什麼?執行流程是什麼?Redis持久化
- 國密瀏覽器是什麼?有哪些?有什麼特點?瀏覽器
- C/S結構是什麼意思?有什麼優點?
- Python中Django是什麼?Django框架優點有哪些?PythonDjango框架
- SID是什麼?用於什麼場景
- SFTP是什麼協議?優勢有哪些?與FTP有什麼不同?FTP協議
- 面試官:Kafka是什麼,它有什麼特性與使用場景?面試Kafka
- 面試官:ElasticSearch是什麼,它有什麼特性與使用場景?面試Elasticsearch
- 面試官:RocketMQ是什麼,它有什麼特性與使用場景?面試MQ
- 面試官:Zookeeper是什麼,它有什麼特性與使用場景?面試
- 開源堡壘機是什麼?開源堡壘機的優缺點是什麼?
- 征服 JavaScript 面試:什麼是閉包JavaScript面試
- JS 中的閉包是什麼?JS
- 臺灣伺服器的優缺點是什麼?伺服器
- Redis持久化RDB和AOF優缺點是什麼?Redis持久化
- SQLJ是什麼?優點?SQL
- 美團一面:什麼是CAS?有什麼優缺點?我說我只用過AtomicInteger。。。。