第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript let和var的用法

javascript let和var的用法

素胚勾勒不出你 2018-08-10 09:06:58
在看阮老師的ECMAScript 6 入門 時遇到了這個問題。先貼代碼 :var a = [];for (var i = 0; i < 10; i++) {   a[i] = function () {    console.log(i);   }; } a[6](); // 10不理解為什么是10,書中是這樣解釋的。變量i是var聲明的,在全局范圍內(nèi)都有效。所以每一次循環(huán),新的i值都會覆蓋舊值,導(dǎo)致最后輸出的是最后一輪的i的值。先假設(shè)是覆蓋了,那為什么是10,為什么不是9, 不是 i < 10 嗎?還有這個let的用法var a = [];for (let i = 0; i < 10; i++) {   a[i] = function () {    console.log(i);   }; } a[6](); // 6let聲明 i , 就得到了6,這是為什么???書中是這樣解釋的。變量i是let聲明的,當(dāng)前的i只在本輪循環(huán)有效,所以每一次循環(huán)的i其實都是一個新的變量,所以最后輸出的是6。整理下問題 :1.用var聲明的為什么結(jié)果是10,就算不是6,也該是9啊,因為循環(huán)是從0-9.2.用let聲明的為什么是6?
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻1900條經(jīng)驗 獲得超5個贊

1 這個問題跟var let沒關(guān)系,10是因為循環(huán)到9以后,js并不知道循環(huán)結(jié)束了,還會進行下一次循環(huán),i加一等于10,然后判斷條件發(fā)現(xiàn)不滿足,才跳出循環(huán)。
2 var i你想象成全局變量,每次循環(huán)修改的、函數(shù)里面console.log訪問的,都是同一個i。a[6]()是在循環(huán)結(jié)束后執(zhí)行的,這時候的i由第一問知道是10。
let i你想象成局部變量,每次循環(huán)都生成一個新的,函數(shù)里面console.log訪問的也都是不同的i。下面這段代碼可能對你有點繞,但理解后對你學(xué)習(xí)js的變量很有幫助:

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

循環(huán)變量i傳到一個立即執(zhí)行函數(shù)里,變成了局部變量i(其實這個函數(shù)的參數(shù)可以任意取名,取成i為了加深你的理解),在這個局部變量的作用域內(nèi)定義了一個函數(shù)引用了它,js就會把它作為函數(shù)的上下文保存起來,所以console.log得到的是0到9不同的值。


查看完整回答
反對 回復(fù) 2018-09-23
  • 1 回答
  • 0 關(guān)注
  • 1071 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號