關於閉包最通俗易懂的解釋

2022-06-06 20:21:10 字數 1599 閱讀 3119

1,對於乙個基本的for迴圈,順序輸出變數值。

for(var i = 1; i < 4; i++)

2,如果for迴圈中有定時器,如下**。

for (var i = 1; i < 4; i++) , 3000);
}

初衷想要3s後輸出1,2,3。但是3s後,輸出3個4。原因是定時器的非同步執行,for迴圈的執行速度很快,當真正執行到函式體時,此時i早已變成4,所以結果不想而知。

3,如果要得到正確結果,就要引入閉包來儲存變數i不被銷毀。

for (var i = 1; i < 4; i++) , 3000);
})(i)
}

這樣引入閉包,變數i儲存下來,3s後函式體執行,輸出1,2,3.

也可以這樣寫

for (var i = 1; i < 4; i++)
function

fn(a)

}

4,如果要實現,沒隔3s輸出乙個數字,即,3s輸出1,3s後再輸出2...,就要對定時器時間設定

for (var i = 1; i < 4; i++) , a*3000);
})(i)
}

實際上,for迴圈很快,上述**類似於同時啟動3個定時器,只需要確保時間不一樣即可。在此,時間分別是3s,6s,9s,由於同時啟動,但是執行時間不同,各個時間間隔都是3s。巧妙地達到了目的。

後續如果有補充,會繼續新增...

1,對於乙個基本的for迴圈,順序輸出變數值。

for(var i = 1; i < 4; i++)

2,如果for迴圈中有定時器,如下**。

for (var i = 1; i < 4; i++) , 3000);
}

初衷想要3s後輸出1,2,3。但是3s後,輸出3個4。原因是定時器的非同步執行,for迴圈的執行速度很快,當真正執行到函式體時,此時i早已變成4,所以結果不想而知。

3,如果要得到正確結果,就要引入閉包來儲存變數i不被銷毀。

for (var i = 1; i < 4; i++) , 3000);
})(i)
}

這樣引入閉包,變數i儲存下來,3s後函式體執行,輸出1,2,3.

也可以這樣寫

for (var i = 1; i < 4; i++)
function

fn(a)

}

4,如果要實現,沒隔3s輸出乙個數字,即,3s輸出1,3s後再輸出2...,就要對定時器時間設定

for (var i = 1; i < 4; i++) , a*3000);
})(i)
}

實際上,for迴圈很快,上述**類似於同時啟動3個定時器,只需要確保時間不一樣即可。在此,時間分別是3s,6s,9s,由於同時啟動,但是執行時間不同,各個時間間隔都是3s。巧妙地達到了目的。

後續如果有補充,會繼續新增...

python通俗易懂的閉包

檢視官方解釋,閉包看起來確實不好理解,我通過查資料將閉包做乙個通俗的解釋 閉包是函式裡面再次定義乙個函式,外部的函式暫且稱為外函式,內部的函式暫且稱為內函式。外函式的返回值為內函式和它的環境,它的環境就是外函式的區域性變數 也是內函式的外部變數 當前的值,比如當前變數的值,很多教程裡將閉包的時候會用...

CDN最通俗易懂的CDN解釋

cdn的全稱是content delivery network,即內容分發網路。cdn是構建在現有網路基礎之上的智慧型虛擬網路,依靠部署在各地的邊緣伺服器,通過中心平台的負載均衡 內容分發 排程等功能模組,使使用者就近獲取所需內容,降低網路擁塞,提高使用者訪問響應速度和命中率。cdn的關鍵技術主要有...

memset函式()通俗易懂解釋

memset 函式原型是 extern void memset void buffer,int length,int buf buffer 是指標或者陣列,void是要初始化的首記憶體的首位址 length是要初始化的變為的資料,buf是buffer的長度,即大小。網路程式設計中memset函式多用...