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

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

這個變量i,有點不太懂

這個變量i,有點不太懂

喵喵時光機(jī) 2018-12-10 17:15:43
for (let i = 0; i < 5; i++) {            a[i] = function() {                console.log(i)            }        }        a[2]() //2i為什么不是undefined,for循環(huán)里面我只是創(chuàng)建了一個函數(shù),為什么我執(zhí)行a[2]的時候還是能拿到i的值
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊

因為let具有塊級作用域的特性,因此i只會在當(dāng)前循環(huán)有效。
實際上你的循環(huán)創(chuàng)建了5個塊級作用域,每一個i值都只在當(dāng)前的塊級作用域中有效果。

你的代碼等同于如下:

"use strict";


var _loop = function _loop(i) {

    a[i] = function () {

        console.log(i);

    };

};


for (var i = 0; i < 5; i++) {

    _loop(i);

}


a[2]();

這里就很容易能看出:
實際上let的存在讓每一個i值都保存在了一個閉包中。因此這個循環(huán)創(chuàng)建了5個閉包。
而a數(shù)組里則保存了一堆函數(shù),每一個函數(shù)都訪問了對應(yīng)的閉包中的i值。

所以i的值肯定是存在的而不undefined。

當(dāng)你看不懂ES6語法相關(guān)的代碼時,可以利用babel的在線工具將ES6的例子轉(zhuǎn)換成ES5的代碼。 在線地址


查看完整回答
反對 回復(fù) 2019-01-03
  • 1 回答
  • 0 關(guān)注
  • 450 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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