亚洲av无码乱码国产一区二区,午夜理论片yy44880影院,午夜久久久久久禁播电影,熟睡人妻被讨厌的公侵犯

21
2019/09

關(guān)于閉包的問題以及解決辦法

發(fā)布時間:2019-09-21 10:32:30
發(fā)布者:小逗號
瀏覽量:
0

閉包,是開發(fā)中常見的問題了 ,最近文匯軟件小編在開發(fā)一視頻列表的時候遇到了這個問題接下來給大家分享一下。

那么什么是閉包呢?

接下來先看段代碼:

關(guān)于閉包的問題以及解決辦法

video標(biāo)簽的個數(shù)是3個 ,所以b的值為3 ;循環(huán)內(nèi)輸出變量i的值為0,1,2這個沒問題 ,在循環(huán)內(nèi)給每個video注冊監(jiān)聽事件 ,判斷video標(biāo)簽的播放狀態(tài)來進(jìn)行接下來事件的處理。這里打印i的值,邏輯下這個值應(yīng)該是0,1或者2.哪個標(biāo)簽在播放就輸出哪個值。接下來我們打印一下:

關(guān)于閉包的問題以及解決辦法

結(jié)果跟想象中的不一樣 ,不論播放哪個標(biāo)簽。打印的值都是3。那么這是為什么呢?

a[i]這個里面的i會跟著for循環(huán)語句一個一個的變,而它后面的函數(shù)體里面的i是不同時隨著一起變的,不知道i為多少,只有當(dāng)最后函數(shù)外面調(diào)用這個函數(shù)體時才會找這個語句里面i的值(console.log(i)調(diào)用了),而此時i已經(jīng)變成了3(因為上面for循環(huán)執(zhí)行到i = 2時i++,此時i = 2,但是i不滿足判斷條件,賦值語句不執(zhí)行,但是i已經(jīng)變成了3);這就是閉包?。?!

那么如何解決這個問題?

js中沒有會計作用域,所以循環(huán)內(nèi)函數(shù)調(diào)用時調(diào)用的是全局作用域里的值,也就是3;但是在ES6中l(wèi)et實際是為js新增了塊級作用域,那么我們改下代碼:

關(guān)于閉包的問題以及解決辦法

接下來打印下結(jié)果:

關(guān)于閉包的問題以及解決辦法

我們可以看到 ,輸出的結(jié)果是我們期望的,上述代碼中for循環(huán)之后的{}是塊級作用域,每次循環(huán)時候每個返回的函數(shù)引用的是其對應(yīng)塊作用域的變量。i的值在for循環(huán)的作用域之外也是獲取不到的。

好了,今天文匯軟件小編就給大家介紹這些 ,大家可以自己試驗下哦 ,歡迎評論區(qū)留言討論更多前端知識。


關(guān)鍵詞:
返回列表