閉包問題
一般來說函式內部可以訪問函式外部的變數,但外部不能訪問函式內部的變數。
如果想讓一個函式訪問另一個函式內部的變數,這就需要閉包函式。簡單來說,實現閉包就是函式巢狀函式。
有三種方式:
1.呼叫函式。例:
function a(){
var n = 1;
function b(){
console.log("n:",n);
}
b();
}
a();
2.返回值
function a() {
var x = 1;
return function () {
console.log("x:", x);
}
}
a()();
3 .自呼叫
function a() {
var x = 1;
(function () {
console.log("x:", x);
})()
}
a();
閉包在定時器傳參時的使用
定時器直接迴圈會出現以下問題:
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
結果如下:
可以使用let(塊級作用域)解決傳參問題:
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
結果如下:
也可以使用閉包來解決:
for (var i = 0; i < 5; i++) {
function a(m) {
setTimeout(() => {
console.log(m);
}, 1000 * m);
}
a(i);
}
結果如下:
相關文章
- 閉包 | 淺談JavaScript閉包問題JavaScript
- go 閉包捕獲問題Go
- Python閉包區域性變數問題Python變數
- react要避免閉包問題,具體指的是哪些?React
- 從閉包引出來的一系列問題
- go語言採坑:閉包共享變數問題Go變數
- vue中methods中的方法閉包快取問題Vue快取
- 面試題:如何理解閉包面試題
- 經典 JS 閉包面試題JS面試題
- 前端面試題15----閉包前端面試題
- 揹包問題
- 粘包問題
- TCP粘包拆包問題TCP
- 閉包
- Swift-逃逸閉包、自動閉包Swift
- 01揹包問題
- 01 揹包問題
- Python如何訪問閉包中的變數Python變數
- 收集的一些React hooks的效能優化以及閉包陷阱問題ReactHook優化
- 【集合論】關係閉包 ( 關係閉包求法 | 關係圖求閉包 | 關係矩陣求閉包 | 閉包運算與關係性質 | 閉包複合運算 )矩陣
- 揹包問題(01揹包與完全揹包)
- JS 事件迴圈,閉包,作用域鏈題JS事件
- 閉包是什麼?怎麼形成一個閉包?為什麼使用閉包?
- JavaScript - 閉包JavaScript
- JavaScript 閉包JavaScript
- Golang閉包Golang
- 理解“閉包”
- PHP 閉包PHP
- JavaScript閉包JavaScript
- Swift 閉包Swift
- golang 閉包Golang
- 「閉包」攻略
- 揹包問題例題總結
- 什麼是閉包,閉包的優缺點?
- 揹包問題大合集
- Go TCP 粘包問題GoTCP
- 經典揹包問題
- 005多重揹包問題||