国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

javascript - ES6標準入門中let命令提到的for循環打印i是10,如果不用let怎么替換?

瀏覽:113日期:2023-05-09 10:31:59

問題描述

最近在讀阮一峰老師的ES標準入門,讀到第一章的時候提到了一段代碼

var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10

這里用let就可以解決這個問題,但是如果用ES5的方法呢?IIFE可以做到,不過是立即打印出來。

問題解答

回答1:

var a = []; for(var i = 0; i < 10; i++) {+function(i){ a[i] = function() {console.log(i); }}(i); };a[6](); // 6

閉包問題

回答2:

可以利用 自定義屬性var a = [];for (var i = 0; i < 10; i++) {

var a[i].n = i;//自定義一個屬性 n a[i] = function () { console.log(this.n); };

}a[6](); // 6

回答3:

這個不關let什么事,我想提問者應該是想要輸出6吧?

但是你這提出來的問題,感覺和你想要的完全不搭邊啊,我想幫你改提問描述也有點無能為力啊……

這其實是閉包的問題,主要,我們先分析下為什么會輸出10:

var a = [];for(var i = 0; i < 10; i++) { a[i] = function () {console.log(i); };}a[6](); // 10

for里面的i的作用于是整個外部區域,所以,當調用a[6]()的時候,其實運行的是console.log(i),而此時因為跑完循環,i的值是10,所以輸出10。

至于提問者說的,let可以解決,是因為,for里面,let聲明的變量,作用于只在for內部,所以,不會因為循環跑完而使得i在全局作用域中為10。

其實,這個問題真正考察的應該是閉包。

var a = [];for(var i = 0; i < 10; i++) { (function() {[i] = function () { console.log(i);} })(i);}a[6]();

閉包的作用,類似于之前let的作用,是將局部的變量相互隔離開而不至于污染外部的變量值,每一個閉包內,都是一個獨立的區域,而閉包傳參只用于閉包內部使用,所以也可以實現輸出6的結果。

回答4:

可以采用閉包的方式http://www.softwhy.com/articl...這個文章的后半部分已經解釋了你的疑問

標簽: JavaScript
主站蜘蛛池模板: 国内精品1区1区3区4区 | 一级毛片私人影院老司机 | 欧美精品在线免费观看 | 美女午夜影院 | 欧美高清日本三级人妇 | 香港免费毛片 | 91高清国产经典在线观看 | 亚洲男人的天堂在线观看 | 国产精品久久久久久小说 | 爽爽爽爽爽爽爽成人免费观看 | baby在线观看免费观看 | 九九精品99久久久香蕉 | 欧美 另类 精品一区视频 | 日本加勒比在线视频 | 一级欧美一级日韩毛片99 | 亚洲女视频 | 波多野结衣一区在线 | 中文字幕日韩精品有码视频 | 亚洲成a人片在线播放 | 性感美女一级片 | 国产成人精品久久亚洲高清不卡 | 国产精品18久久久久网站 | 俄罗斯毛片免费大全 | 日本三级成人中文字幕乱码 | 成人怡红院视频在线观看 | 日韩免费观看一级毛片看看 | 亚洲成年www| 国产在线一二三区 | 亚洲一区成人 | 日韩精品一区二三区中文 | 精品国产一区二区三区四区vr | 国产欧美在线一区二区三区 | 国产精品视频视频久久 | 国产永久精品 | 日韩美女视频一区 | 免费在线国产视频 | 亚洲人免费视频 | 亚洲欧美日韩在线观看二区 | 国产日韩免费 | 三a大片| 精品综合久久久久久蜜月 |