亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - ES6標準入門中l(wèi)et命令提到的for循環(huán)打印i是10,如果不用let怎么替換?

瀏覽:102日期: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:

這個不關(guān)let什么事,我想提問者應(yīng)該是想要輸出6吧?

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

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

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

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

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

其實,這個問題真正考察的應(yīng)該是閉包。

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

閉包的作用,類似于之前l(fā)et的作用,是將局部的變量相互隔離開而不至于污染外部的變量值,每一個閉包內(nèi),都是一個獨立的區(qū)域,而閉包傳參只用于閉包內(nèi)部使用,所以也可以實現(xiàn)輸出6的結(jié)果。

回答4:

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

標簽: JavaScript
主站蜘蛛池模板: 九九九色视频在线观看免费 | 成年性视频bbixx | 亚洲精品国产精品乱码不卞 | 老外黑人一级毛片 | 乱理最新乱理片中文 | yy一级毛片免费视频 | 国产精品久久福利新婚之夜 | 国产三级网站在线观看 | 日韩不卡高清视频 | 国产精品一区久久 | 国产一级大片在线观看 | 国产线路 中文字幕 | 日韩一页| 亚洲欧洲日韩国产 | 一级女性全黄生活片免费看 | 亚洲欧美国产毛片在线 | 特黄未满14周岁毛片 | 久久精品国产夜色 | 99re8免费视频精品全部 | 日本一级毛片视频 | 中文在线免费看视频 | 99精品国内不卡在线观看 | 国产成人99精品免费观看 | 影视先锋影音在线中文字幕 | 福利入口在线观看 | wwxxx日本| 免费看片aⅴ免费大片 | 啪啪免费网站入口链接 | 久久福利一区 | 亚洲第一成人影院 | 日韩欧美中文字幕在线视频 | 国产精品毛片在线更新 | 亚洲五月婷婷 | 韩国在线看免费观看高清 | 国产精品久久久久毛片 | 国内精品福利视频 | 国产欧美精品亚洲桃花岛 | 国产九九免费视频网站 | 精品国产免费观看一区 | 国产在线看片网站 | 欧美一级第一免费高清 |