• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    你必須知道的Javascript知識(shí)點(diǎn)之&quot;深入理解作用域鏈&quot;的介紹_javascript技巧

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:08:49
    文檔

    你必須知道的Javascript知識(shí)點(diǎn)之"深入理解作用域鏈"的介紹_javascript技巧

    你必須知道的Javascript知識(shí)點(diǎn)之"深入理解作用域鏈"的介紹_javascript技巧:示例代碼: 代碼如下:var xxxVar1 = 1; var outer = function(){ var xxxVar2 = 2; var results = []; for(var i = 0; i { var inner = function(){ var xxxVar3 = 3; return xxxVar3 + xxxVar2 +x
    推薦度:
    導(dǎo)讀你必須知道的Javascript知識(shí)點(diǎn)之"深入理解作用域鏈"的介紹_javascript技巧:示例代碼: 代碼如下:var xxxVar1 = 1; var outer = function(){ var xxxVar2 = 2; var results = []; for(var i = 0; i { var inner = function(){ var xxxVar3 = 3; return xxxVar3 + xxxVar2 +x

    示例代碼:
    代碼如下:
    var xxxVar1 = 1;
    var outer = function(){
    var xxxVar2 = 2;

    var results = [];

    for(var i = 0; i< 3; i++)
    {
    var inner = function(){
    var xxxVar3 = 3;
    return xxxVar3 + xxxVar2 +xxxVar1 + i;
    }
    results .push(inner);
    }

    return results;
    }

    var xxxVar1 = 100;
    var xxxVar2 = 200;
    var xxxVar3 = 300;
    var results = outer();
    results[0]();
    results[1]();
    results[2]();

    執(zhí)行結(jié)果

    發(fā)生了什么事情很多人都可能知道上例的執(zhí)行結(jié)果,但是不是所有人都明白為什么會(huì)是這樣的結(jié)果,包括我自己。名詞解釋活動(dòng)對(duì)象:一次函數(shù)調(diào)用開始的時(shí)候,javascript解釋器會(huì)收集函數(shù)體中的所有局部變量(以var形式聲明的變量),將這些局部變量存儲(chǔ)到一個(gè)稱為“活動(dòng)對(duì)象”的對(duì)象里,所有變量都初始為undefined。
    代碼示例
    代碼如下:
    var fun = function(){
    alert(name);
    var name = '段光偉';
    }

    當(dāng)執(zhí)行這個(gè)函數(shù)時(shí)候時(shí)(fun()),函數(shù)體還沒(méi)執(zhí)行到,當(dāng)前的活動(dòng)對(duì)象為[{ name: undefined }],因此fun()執(zhí)行的結(jié)果為:

  • 函數(shù)的[scope]屬性:每個(gè)函數(shù)在定義的時(shí)候(生成函數(shù)實(shí)例的時(shí)候)都會(huì)分配一個(gè)[scope]屬性,這個(gè)屬性指向的當(dāng)前的“作用域鏈”。這個(gè)屬性開發(fā)人員是訪問(wèn)不到的,只有javascript能訪問(wèn)。
  • 作用域鏈:當(dāng)函數(shù)調(diào)用時(shí),javascript引擎會(huì)維護(hù)一個(gè)這次調(diào)用的作用域鏈,這個(gè)作用域鏈條是函數(shù)的[scope]指向的作用域鏈加上函數(shù)調(diào)用時(shí)的活動(dòng)對(duì)象,形式如[ 活動(dòng)對(duì)象, 函數(shù)定義時(shí)的作用域鏈條]。
    代碼示例
    代碼如下:
    var a = 1;
    //步驟1:[ { a: 1, outer: undefined } ]

    var outer = function(){
    //步驟3:[ { b: undefined, inner: undefined } ,{ a: 1, outer: function } ]
    var b = 2;
    var inner = function(){
    //步驟5:[ {}, { b: 2, inner: function } ,{ a: 1, outer: function } ]
    return a + b;
    }

    //步驟4:[ { b: 2, inner: function } ,{ a: 1, outer: function } ]
    return inner();
    }

    //步驟2:[ { a: 1, outer: function } ]
    outer();

    作用域鏈規(guī)則規(guī)則1

    javascript一般運(yùn)行在一定的宿主中,每個(gè)宿主都會(huì)提供一個(gè)“全局對(duì)象”,或者叫“全局活動(dòng)對(duì)象”,這個(gè)全局對(duì)象是所有作用域鏈的根節(jié)點(diǎn)。

    規(guī)則2

    “取值操作”(如:alert(xxxVar))的規(guī)則是,沿著作用域鏈依次查找名稱為“xxxVar”的變量,返回第一個(gè)找到的值,如果找不到就拋出異常(ReferenceError: xxxVar is not defined)。

    規(guī)則3

    “賦值操作”(如:xxxVar = '段光偉')的規(guī)則是,沿著作用域鏈依次查找名稱為“xxxVar”的變量,覆蓋第一個(gè)找到的值,如果找不到就將“xxxVar”添加到全局對(duì)象中。

    備注“閉包”這個(gè)概念就是通過(guò)“作用域鏈”實(shí)現(xiàn)的,而C#是通過(guò)編譯器實(shí)現(xiàn)的,.NET并不支持。
  • 聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    你必須知道的Javascript知識(shí)點(diǎn)之"深入理解作用域鏈"的介紹_javascript技巧

    你必須知道的Javascript知識(shí)點(diǎn)之"深入理解作用域鏈"的介紹_javascript技巧:示例代碼: 代碼如下:var xxxVar1 = 1; var outer = function(){ var xxxVar2 = 2; var results = []; for(var i = 0; i { var inner = function(){ var xxxVar3 = 3; return xxxVar3 + xxxVar2 +x
    推薦度:
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 中国国产精品| 亚洲AV无码国产精品麻豆天美| 国内精品视频九九九九| 久久精品九九亚洲精品| 精品无码国产污污污免费网站国产| 精品久久综合1区2区3区激情| 日韩精品久久久久久久电影蜜臀| 久久久久99精品成人片直播| 精品a在线观看| 久热这里只精品99re8久| 亚洲精品乱码久久久久久久久久久久 | 亚洲午夜精品第一区二区8050 | 国产精品久久国产精品99盘| 亚洲精品无码鲁网中文电影| 精品人体无码一区二区三区| 欧美精品福利视频| 99re这里只有精品热久久| 日韩精品国产另类专区| 亚洲精品色午夜无码专区日韩| 久久久久国产精品三级网| 国产精品九九久久免费视频 | 国产精品一久久香蕉国产线看观看 | 国内精品伊人久久久久影院对白| 精品精品国产自在久久高清| 国产国拍亚洲精品mv在线观看| 色国产精品一区在线观看| 亚洲精品无码久久久| 精品国内自产拍在线观看 | 日韩精品久久久肉伦网站| 亚洲国产精品无码AAA片| 无码AⅤ精品一区二区三区| 久久精品国产亚洲AV不卡| 精品国产一级在线观看| 精品国产人成亚洲区| 国产欧美精品专区一区二区 | 久久久久亚洲精品天堂| 亚洲AV无码成人精品区蜜桃| 午夜天堂精品久久久久| 亚洲热线99精品视频| 日韩精品无码中文字幕一区二区| 亚洲精品无码久久久久去q |