閉包的乙個坑

2021-07-02 21:15:18 字數 477 閱讀 7953

閉包的乙個坑

for (var i =

0; i <

5; i++) , 5);

}

上面這個**塊會列印五個5出來,而我們預想的結果是列印 1 2 3 4 5。

之所以會這樣,是因為 settimeout 中的 i 是對外層 i 的引用。當 settimeout 的**被解釋的時候,執行時只是記錄了 i 的引用,而不是值。而當 settimeout 被觸發時,五個 settimeout 中的 i 同時被取值,由於它們都指向了外層的同乙個 i,而那個 i 的值在迭代完成時為 5,所以列印了五次5

為了得到我們預想的結果,我們可以把 i 賦值成乙個區域性的變數,從而擺脫外層迭代的影響。

for (var i =

0; i <

5; i++) , 5);

})(i);

}

乙個閉包的簡單例子

最近有很多朋友都在問我 閉包是什麼 開始自己也是懵逼的 琢磨了下 才有了了解 下面就為大家簡單的實現以下 如下 var a function a a to do console.log a 定義乙個匿名函式,把a傳遞進去,a是undefined 因為匿名函式本身沒有返回值,如果是 var a fun...

PHP乙個典型的閉包例項

乙個基本的購物車,包括一些已經新增的商品和每種商品的數量。其中有乙個方法用來計算購物車中所有商品的總 該方法使 用了乙個 closure 作為 函式。class carts public function getquantity product public function gettotal ta...

golang閉包裡的坑

介紹 go的閉包是乙個很有用的東西。但是如果你不了解閉包是如何工作的,那麼他也會給你帶來一堆的bug。這裡我會拿出go in action這本書的一部分 來說一說在使用閉包的時候可能遇到的坑。全部的 在github上。閉包的坑 首先看一段 search search.go launch a goro...