成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【闖關(guān)模式】作用域、鏈和閉包 上

shinezejian / 2743人閱讀

摘要:前言這個(gè)系列是翻譯自中的直接闖關(guān)作用域鏈和閉包作用域,作用域鏈,閉包和垃圾回收機(jī)制都有一個(gè)共同點(diǎn)學(xué)了就忘閉包到底是干啥的啥時(shí)候發(fā)生垃圾回收機(jī)制作用域鏈到底是啥這個(gè)教程讓你發(fā)現(xiàn)這些都是小意思。

前言

這個(gè)系列是翻譯自 nodeschool.io中的 scope-chains-closures

直接闖關(guān):

npm install -g scope-chains-closures
scope-chains-closures

作用域鏈和閉包

作用域,作用域鏈,閉包和垃圾回收機(jī)制都有一個(gè)共同點(diǎn):學(xué)了就忘!
閉包到底是干啥的?
啥時(shí)候發(fā)生垃圾回收機(jī)制?
作用域鏈到底是啥?

這個(gè)教程讓你發(fā)現(xiàn)這些都是小意思。讓你在實(shí)踐中學(xué)習(xí)!

任務(wù)一 作用域

作用域的主要類型是詞法作用域
簡單來說是function創(chuàng)建的作用域。(ES6中的塊級作用域暫且不提)

初始化變量

變量的初始化取決于作用域的類型

詞法作用域

var用來將變量定義在詞法作用域中(也就是function中)

function someFunc(){
    var a;
}

a就被函數(shù)someFunc框在了詞法作用域中

塊級作用域

letconst用來將變量定義在塊級作用域中(也就是花括號(hào)中)

if(true){
    let b;
}

b就被if的花括號(hào)框在了塊級作用域中

你的任務(wù)

在空白的js文件中新建一個(gè)函數(shù)foo,并包含一個(gè)詞法作用域中的變量bar

任務(wù)二 作用域鏈 作用域嵌套

作用域是可以嵌套的,任務(wù)一中提到的詞法作用域和塊級作用域都可以嵌套其他作用域
(塊級作用域僅對ES6而言)

function someFunc(){
    function inner(){
    }
}

inner就是嵌套在someFunc(詞法作用域)中的詞法作用域

if(true){
    while(false){
    }
}

while就是嵌套在if(塊級作用域)中的塊級作用域

function someFunc(){
    if(true){
    }
}

if就是嵌套在someFunc(詞法作用域)中的塊級作用域

作用域中的變量訪問

所有的嵌套作用域都遵循以下規(guī)則:
內(nèi)部作用域有權(quán)訪問外部作用域,反之不成立。

栗子:

function someFunc(){
    var outerVar = 1;
    function inner(){
        var innerVar = 2;
    }
}

inner有權(quán)訪問innerVarouterVar,但是someFunc只能訪問到outerVar

多重嵌套作用域

作用域是可以任意嵌套的,但是都要遵循上面的規(guī)則。
再附加一個(gè)規(guī)則:
兄弟作用域不可相互訪問

栗子:

function someFunc(){
    function inner(){
    }
    function inner2(){
    }
}

innerinner2都是someFunc中的作用域,正如someFunc不能訪問inner們的作用域一樣,inner們之間也不能相互訪問。

作用域樹

從上向下看這個(gè)嵌套作用域,就是棵樹!
看代碼:

function someFunc() {
  function inner() {
  }
  function inner2() {
    function foo() {
    }
  }
}

看樹:

   someFunc()
       |
      / 
     /   
    /     
   ↓       ↓
inner()  inner2()
           |
           ↓
         foo()

要記住的是:inner作用域可以訪問外部作用域,但是反之不成立(foo()可以訪問inner2()中的變量,inner2()可以訪問someFunc()中的變量),這棵樹倒過來似乎更有意義,就成了鏈?。?/p> 作用域鏈

從最里面看到最外面就構(gòu)成了作用域鏈

   someFunc()
       ↑
        
         
          
         inner2()
           ↑
           |
         foo()
你的任務(wù)

修改任務(wù)一中的代碼,讓foo中包含一個(gè)函數(shù)zip,同時(shí)zip也包含一個(gè)變量quux

完成后執(zhí)行:scope-chains-closures verify 驗(yàn)證答案

附錄

scope-chains-closures workshop
scope cheatsheet

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79111.html

相關(guān)文章

  • 闖關(guān)模式作用、鏈和閉包

    摘要:前言上篇闖關(guān)模式作用域鏈和閉包上任務(wù)三全局作用域和變量遮蔽全局作用域理解作用域鏈在哪結(jié)束很重要所有的運(yùn)行時(shí)環(huán)境都必須隱式創(chuàng)建一個(gè)全局作用域?qū)ο鬄g覽器中是,中是,這個(gè)對象就位于作用域鏈的頂端在任務(wù)一中,我們忽略了一個(gè)細(xì)節(jié),即當(dāng)不使用或者等定義 前言 上篇:【闖關(guān)模式】作用域、鏈和閉包 上 任務(wù)三 Global Scope & Shadowing 全局作用域和變量遮蔽 全局作用域(Glob...

    airborne007 評論0 收藏0
  • 闖關(guān)模式作用、鏈和閉包

    摘要:前言上篇闖關(guān)模式作用域鏈和閉包中任務(wù)四閉包閉包在中是很重要的概念,他們讓出色地完成異步任務(wù)。所以說,作用域,作用域鏈,閉包,垃圾回收機(jī)制,他們都是息息相關(guān)的你的任務(wù)你需要用的來檢驗(yàn)垃圾回收機(jī)制的運(yùn)行。 前言 上篇 【闖關(guān)模式】作用域、鏈和閉包 中 任務(wù)四 閉包(Closures) 閉包在JS中是很重要的概念,他們讓JS出色地完成異步任務(wù)。 為了能更好的理解閉包,我們先來看作用域鏈的例子...

    firim 評論0 收藏0
  • JavaScript 闖關(guān)

    摘要:對象數(shù)組初始化表達(dá)式,闖關(guān)記之上文檔對象模型是針對和文檔的一個(gè)。闖關(guān)記之?dāng)?shù)組數(shù)組是值的有序集合。數(shù)組是動(dòng)態(tài)的,根闖關(guān)記之語法的語法大量借鑒了及其他類語言如和的語法。 《JavaScript 闖關(guān)記》之 DOM(下) Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現(xiàn) XML 或 HTML 元素...

    mj 評論0 收藏0
  • 《JavaScript 闖關(guān)記》之作用閉包

    摘要:作用域和閉包是最重要的概念之一,想要進(jìn)一步學(xué)習(xí),就必須理解作用域和閉包的工作原理。全局和局部作用域的關(guān)系在函數(shù)體內(nèi),局部變量的優(yōu)先級高于同名的全局變量。作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進(jìn)一步學(xué)習(xí) JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評論0 收藏0
  • 【進(jìn)階2-1期】深入淺出圖解作用鏈和閉包

    摘要:本期推薦文章從作用域鏈談閉包,由于微信不能訪問外鏈,點(diǎn)擊閱讀原文就可以啦。推薦理由這是一篇譯文,深入淺出圖解作用域鏈,一步步深入介紹閉包。作用域鏈的頂端是全局對象,在全局環(huán)境中定義的變量就會(huì)綁定到全局對象中。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周開始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第6天。 本...

    levius 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<