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

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

如何理解閉包

如何理解閉包

動漫人物 2019-03-13 13:14:12
1.使用var:var a = [];for (var i = 0; i < 10; i++) {  a[i] = function () {    console.log(i);  };}a[6](); // 102.使用letvar a = [];for (let i = 0; i < 10; i++) {  a[i] = function () {    console.log(i);  };}a[6](); // 6問題:在1中,循環(huán)內(nèi)被賦給數(shù)組a的函數(shù)內(nèi)部的console.log(i),里面的i指向的是全局的i,那a[i]的i豈不是也指向全局的i,那豈不是只有a[10]有值?
查看完整描述

7 回答

?
阿波羅的戰(zhàn)車

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

1、循環(huán)中的語句是立即執(zhí)行

2、每進一次循環(huán),都會給數(shù)組第i項賦值

3、這里賦值的是個函數(shù),但函數(shù)并沒有執(zhí)行

所以循環(huán)完了是這樣的:


[

function(){console.log(i)},

function(){console.log(i)},

function(){console.log(i)},

function(){console.log(i)},

function(){console.log(i)},

function(){console.log(i)},

function(){console.log(i)}

]

//由于全局的i是10

//所以每一項打印都是10


查看完整回答
反對 回復 2019-03-27
?
哆啦的時光機

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

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

  a[i] = function () {

    console.log(i);

  };

}

這里的a[i] 的意思相當于循環(huán)給a數(shù)組添加十個匿名函數(shù)function () {console.log(i);}; 你可以打印一下a你就知道了 a[i]是已經(jīng)確立的了 至于執(zhí)行a[6]相當于執(zhí)行數(shù)組中的第7個匿名函數(shù) 打印i 這時候因為使用的是var 并不會產(chǎn)生塊作用域 所以i的取值等于最外層循環(huán)結束的i值就是10


查看完整回答
反對 回復 2019-03-27
?
長風秋雁

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

不要為了學閉包而閉包, 考慮閉包能做什么... 我感覺

首先,不要相當然的認為 程序按你的想法運行, 我感覺 計算機 算是一門嚴謹?shù)目茖W。

js 詞法作用域...

var a = [];

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

a[i] = (function (i) {


       return function () {

            console.log(i);

          };

})(i)

}

a[6](); // 6


//


查看完整回答
反對 回復 2019-03-27
?
忽然笑

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

我從《你不了解的JS》總結了關于如何理解閉包:

  1. 某個函數(shù)擁有上級(或上多級)作用域的引用, 就叫做閉包

  2. 當函數(shù)記住并訪問其所在的詞法作用域, 即便它是在當前詞法作用域之外執(zhí)行, 這就產(chǎn)生了閉包

  3. 閉包可以使得函數(shù)就訪問定義時的詞法作用域, 所以實際上,只要使用了回調(diào)函數(shù)就使用了閉包

配合一段經(jīng)典的面試代碼就很好理解其一:

function Timer () {
    let time = 1
    return function () {
        console.log(time ++)
    }
}

關于題主的問題,相關閉包,但主要不在“閉包”上,應該是“var與let的作用域的問題”,只有當你了解了閉包并且了解了var與let作用域的不同才能想通這兩個循環(huán)。

總結下JS的塊級作用域(偽塊級作用域):

  1. let

  2. try catch

  3. IIFE

  4. with(不推薦使用)

  5. 還有不。。記不清了


查看完整回答
反對 回復 2019-03-27
  • 7 回答
  • 0 關注
  • 569 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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