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

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

javascript 匿名函數(shù)創(chuàng)建閉包是js引擎是怎么處理的?

javascript 匿名函數(shù)創(chuàng)建閉包是js引擎是怎么處理的?

皈依舞 2018-09-14 09:09:50
求指點,關(guān)于閉包的作用域問題,是這樣的,在執(zhí)行這段代碼的時候,我在google上監(jiān)測變量,發(fā)現(xiàn)一個問題,for(var a = 0;a < 10;a++){     console.log(arr[a]());}在下面這個閉包(作用域2)被調(diào)用的時候可以訪問到他的包含作用域test(作用域1)的變量i以及全局作用域(作用域3),但是如果直接在運行時訪問變量j的話是訪問不到的,js引擎在解析到閉包中i變量的時候發(fā)生了什么事情,function (){return i;}<script>function test(){    //1 塊作用域1 變量 i,arr    var arr = [];    var j = 0;    for(var i = 0;i < 10;i++){        //arr[i] 存儲的是匿名方法的引用,沒有立刻執(zhí)行        arr[i] = function(){ //作用域2            return i; //breakpoint        };    }    // i = 10 arr[i] = function(){return i;}    for(var a = 0;a < 10;a++){        console.log(arr[a]());    }}//作用域3 全局作用域test()var k =1;    </script>Q:執(zhí)行作用域3的時候為什么能訪問到作用域2(test 作用域)中的 i,   作用域1(全局作用域)中的k,為什么不能訪問到作用域2中的j ?
查看完整描述

1 回答

?
慕碼人8056858

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

這個問題我拋開你定義的作用域,也先不考慮ES6的事情,解釋一下你這個問題:

 function test(){        //作用域A
        var arr = [];        var j = 0;        for(var i = 0;i < 10;i++){
            arr[i] = function(){ //作用域A的子作用域B
                return i; 
            };
        }        console.log("i",i);      
        for(var a = 0;a < 10;a++){            console.log(arr[a]());
        }
    }    //作用域3 全局作用域
    test();

這里面var i = 0這句話,實際上i的作用域在作用域A中,和j,arr一樣。

(for循環(huán)不能創(chuàng)造新的作用域。)

而里面的匿名函數(shù),是可以訪問上級的作用域(也就是作用域A)中的變量i的,所以最后打印出來的肯定都是上級的i,即最后的10

關(guān)于匿名函數(shù)作用域中的j,實際上根本沒有這個變量(因為沒有聲明,也沒有“繼承”),個人見解...研究好后再來修改答案

test();這句話,運行的時候是在作用域A中,console.log(arr[a]());而這句話運行的時候是在匿名函數(shù)的作用域中(作用域A的子作用域B)

你這段小代碼里面,并沒有涉及到全局作用域訪問局部作用域變量的事情


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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