摘要:前言這個系列是翻譯自中的直接闖關作用域鏈和閉包作用域,作用域鏈,閉包和垃圾回收機制都有一個共同點學了就忘閉包到底是干啥的啥時候發生垃圾回收機制作用域鏈到底是啥這個教程讓你發現這些都是小意思。
前言
這個系列是翻譯自 nodeschool.io中的 scope-chains-closures
直接闖關:
npm install -g scope-chains-closuresscope-chains-closures
作用域鏈和閉包
作用域,作用域鏈,閉包和垃圾回收機制都有一個共同點:學了就忘!
閉包到底是干啥的?
啥時候發生垃圾回收機制?
作用域鏈到底是啥?
這個教程讓你發現這些都是小意思。讓你在實踐中學習!
任務一 作用域作用域的主要類型是詞法作用域。
簡單來說是function創建的作用域。(ES6中的塊級作用域暫且不提)
變量的初始化取決于作用域的類型
詞法作用域var用來將變量定義在詞法作用域中(也就是function中)
function someFunc(){ var a; }
a就被函數someFunc框在了詞法作用域中
塊級作用域let和const用來將變量定義在塊級作用域中(也就是花括號中)
if(true){ let b; }
b就被if的花括號框在了塊級作用域中
你的任務在空白的js文件中新建一個函數foo,并包含一個詞法作用域中的變量bar
任務二 作用域鏈 作用域嵌套作用域是可以嵌套的,任務一中提到的詞法作用域和塊級作用域都可以嵌套其他作用域
(塊級作用域僅對ES6而言)
function someFunc(){ function inner(){ } }
inner就是嵌套在someFunc(詞法作用域)中的詞法作用域
if(true){ while(false){ } }
while就是嵌套在if(塊級作用域)中的塊級作用域
function someFunc(){ if(true){ } }
if就是嵌套在someFunc(詞法作用域)中的塊級作用域
作用域中的變量訪問所有的嵌套作用域都遵循以下規則:
內部作用域有權訪問外部作用域,反之不成立。
栗子:
function someFunc(){ var outerVar = 1; function inner(){ var innerVar = 2; } }
inner有權訪問innerVar和outerVar,但是someFunc只能訪問到outerVar
多重嵌套作用域作用域是可以任意嵌套的,但是都要遵循上面的規則。
再附加一個規則:
兄弟作用域不可相互訪問
栗子:
function someFunc(){ function inner(){ } function inner2(){ } }
inner和inner2都是someFunc中的作用域,正如someFunc不能訪問inner們的作用域一樣,inner們之間也不能相互訪問。
作用域樹從上向下看這個嵌套作用域,就是棵樹!
看代碼:
function someFunc() { function inner() { } function inner2() { function foo() { } } }
看樹:
someFunc() | / / / ↓ ↓ inner() inner2() | ↓ foo()
要記住的是:inner作用域可以訪問外部作用域,但是反之不成立(foo()可以訪問inner2()中的變量,inner2()可以訪問someFunc()中的變量),這棵樹倒過來似乎更有意義,就成了鏈!!
作用域鏈從最里面看到最外面就構成了作用域鏈
someFunc() ↑ inner2() ↑ | foo()你的任務
修改任務一中的代碼,讓foo中包含一個函數zip,同時zip也包含一個變量quux
完成后執行:scope-chains-closures verify
scope-chains-closures workshop
scope cheatsheet
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79111.html
摘要:前言上篇闖關模式作用域鏈和閉包上任務三全局作用域和變量遮蔽全局作用域理解作用域鏈在哪結束很重要所有的運行時環境都必須隱式創建一個全局作用域對象瀏覽器中是,中是,這個對象就位于作用域鏈的頂端在任務一中,我們忽略了一個細節,即當不使用或者等定義 前言 上篇:【闖關模式】作用域、鏈和閉包 上 任務三 Global Scope & Shadowing 全局作用域和變量遮蔽 全局作用域(Glob...
摘要:前言上篇闖關模式作用域鏈和閉包中任務四閉包閉包在中是很重要的概念,他們讓出色地完成異步任務。所以說,作用域,作用域鏈,閉包,垃圾回收機制,他們都是息息相關的你的任務你需要用的來檢驗垃圾回收機制的運行。 前言 上篇 【闖關模式】作用域、鏈和閉包 中 任務四 閉包(Closures) 閉包在JS中是很重要的概念,他們讓JS出色地完成異步任務。 為了能更好的理解閉包,我們先來看作用域鏈的例子...
摘要:對象數組初始化表達式,闖關記之上文檔對象模型是針對和文檔的一個。闖關記之數組數組是值的有序集合。數組是動態的,根闖關記之語法的語法大量借鑒了及其他類語言如和的語法。 《JavaScript 闖關記》之 DOM(下) Element 類型 除了 Document 類型之外,Element 類型就要算是 Web 編程中最常用的類型了。Element 類型用于表現 XML 或 HTML 元素...
摘要:作用域和閉包是最重要的概念之一,想要進一步學習,就必須理解作用域和閉包的工作原理。全局和局部作用域的關系在函數體內,局部變量的優先級高于同名的全局變量。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學習 JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...
摘要:本期推薦文章從作用域鏈談閉包,由于微信不能訪問外鏈,點擊閱讀原文就可以啦。推薦理由這是一篇譯文,深入淺出圖解作用域鏈,一步步深入介紹閉包。作用域鏈的頂端是全局對象,在全局環境中定義的變量就會綁定到全局對象中。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周開始前端進階的第二期,本周的主題是作用域閉包,今天是第6天。 本...
閱讀 970·2021-11-24 10:42
閱讀 3480·2021-11-19 11:34
閱讀 2609·2021-09-29 09:35
閱讀 2534·2021-09-09 09:33
閱讀 646·2021-07-26 23:38
閱讀 2521·2019-08-30 10:48
閱讀 1391·2019-08-28 18:07
閱讀 425·2019-08-26 13:44