javascript基礎進階——執行環境及作用域鏈

来源:http://www.cnblogs.com/fifalover09/archive/2017/09/04/7474178.html
-Advertisement-
Play Games

概念 執行環境 執行環境定義了變數或函數有權訪問的其他函數,決定了他們各自的行為。每個執行環境都有一個與之關聯的變數對象。 變數對象 環境中定義的所有變數和函數都保存在這個對象中。 全局執行環境 全局執行環境是最外圍的一個執行環境。在web瀏覽器中,全局執行環境被認為是Window對象,因此所有全局 ...


 概念

執行環境

執行環境定義了變數或函數有權訪問的其他函數,決定了他們各自的行為。每個執行環境都有一個與之關聯的變數對象。

變數對象

環境中定義的所有變數和函數都保存在這個對象中。

全局執行環境

全局執行環境是最外圍的一個執行環境。在web瀏覽器中,全局執行環境被認為是Window對象,因此所有全局變數和函數都是作為window對象的屬性和方法創建的。

每個函數都有自己的執行環境。

作用域鏈

當代碼在一個環境中執行,會創建變數對象的一個作用域鏈。

用途:保證對執行環境有權訪問的所有變數和函數有序訪問。

特點:作用域鏈的前端始終是當前執行的代碼所在的環境的變數對象。如果這個環境是函數,則將其活動對象作為變數對象。活動對象最開始只包含arguments對象。作用域的下一個變數對象來自包含環境,而再下個來自下一個包含環境。

 

var  color ="blue";
function changeColor() {
    
    var anotherColor ="red";
    
    function swapColors() {
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
    }

    swapColors();
}

changeColor();

 

 如圖表示執行環境,內部環境可以通過作用域鏈訪問外部環境,但是外部環境不能訪問內部環境中的變數和函數。每個環境都可以向上搜索作用域鏈,以查詢變數和函數;但是不能向下搜索。

 

 

 

 沒有塊級作用域

聲明變數

使用var聲明的變數會自動添加到最接近的環境中。如果省略var關鍵字,即會添加到全局環境中。

function  add(num1,num2) {

    var sum = num1+num2;

    return sum;

}

var result= add(10,10)

console.log(sum)

 

 

sum is not defined

 
 
function  add(num1,num2) {

    sum = num1+num2;

    return sum;

}

var result= add(10,10)

console.log(sum)

 

 
 

 

 

查詢標識符

搜索過程從作用域鏈的前端開始,向上逐級查詢與給定名字匹配的標識符,找到即終止搜索。即如果局部環境中存在著同名標識符,就不會使用位於父環境中的標誌符。

       

var color ="red";

function  getColor() {



    return color;

}



console.log(getColor())

 

 

 

var color ="red";

function  getColor() {

    var color="green";

    return color;

}



console.log(getColor())

 

 

 

 

 

參考:《javascript高級程式設計(第三版)》

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.linux 安裝python pip 及 CPU下tensorfolw安裝 一般的Linux系統中都有自帶的python,但版本較低。 通過終端下載pip ...
  • 首先從表現層介紹,後續後深入原理。 1,先簡單介紹maven如何生成jar文件方便測試 2.自定義兩個jar包,其中包含相同包名和類名 與export的導入順序有關。只會載入第一個,並且運行正常。 3.自定義jar和jdk包, 其中包含相同的包名和類名 與export的導入順序有關。同樣是只會載入第 ...
  • 1. 講講你認為的高性能網站架構,或者說現在流行的網站架構。 2. 什麼是一主多從? 3. 什麼是負載均衡? ...
  • 定義(百度百科): 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。 UML類圖: 具體代碼: 模塊說明: Context:它定義了客戶需要的介面並維護一個具體狀態角色(State)的實例,將與狀態相關的操作交給當前的ConcreteState對象來處理 State:定義一個 ...
  • 在單體應用程式中,組件可通過語言級方法或者函數相互調用。相比之下,基於微服務的應用程式是一個運行在多台機器上的分散式系統。通常,每個服務實例是一個進程。因此,服務必須使用進程間通信(IPC)機制進行交互。稍後我們將瞭解到多種 IPC 技術,但在此之前,我們先來探討一下涉及到的各種設計問題。 ...
  • 用戶註冊 用戶姓名 : ... ...
  • 學習JavaScirpt30的筆記! 有意思! 2 > CSS clock 效果是這樣的.... 這是改良過後的 版本.... 話不多說,直接來看代碼。 首先是html部分 最外層的 clock 來作為底部的圓環。 變化都是在 clock-face 裡面的。 之後就是三個 div指針啦。 下麵是CS ...
  • ES6為Array增加了of函數用已一中明確的含義將一個或多個值轉換成數組。 因為,用new Array()構造數組的時候,是有二意性的。 構造時,傳一個參數,表示生成多大的數組。 構造時,傳多個參數,每個參數都是數組的一個元素。 結果: ES6增加的Array.of()方法,只有一個含義,of的參 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...