JavaScript 高級程式設計(第3版)筆記——chapter4:變數、作用域和記憶體問題

来源:http://www.cnblogs.com/HiuYanChong/archive/2016/03/13/5274255.html
-Advertisement-
Play Games

Chapter4 變數、作用域和記憶體問題 l  理解基本類型和引用類型的值 l  理解執行環境 l  理解垃圾收集   4.1基本類型和引用類型的值 l  ECMAScript變數包含兩種不同數據類型的值:基本類型值和引用類型值。 l  在將一個值賦給變數時,解析器必須確定這個值是基本類型值還是引用


Chapter4 變數、作用域和記憶體問題

l  理解基本類型和引用類型的值

l  理解執行環境

l  理解垃圾收集

 

4.1基本類型和引用類型的值

l  ECMAScript變數包含兩種不同數據類型的值:基本類型值和引用類型值。

l  在將一個值賦給變數時,解析器必須確定這個值是基本類型值還是引用類型值

l  基本類型值:簡單數據段

Undefiened,Null,Boolean,Number,String(按值訪問)

l  引用類型值:可能由多個值構成的對象

Object(複製時:按引用訪問;增加對象屬性:操作實際對象)

 

4.1.1動態的屬性

l  對於引用類型的值,可以添加屬性和方法,也可以刪除屬性和方法

l  對於基本類型的值,無法給其添加屬性和方法(雖然不會導致任何錯誤)

 

4.1.2複製變數值

l  基本類型值:創建新值,複製到為新變數分配的位置上

特點:副本,互不影響

複製前的變數對象

 

 

 

 

 

Num1

5

(Number 類型)

 

複製後的變數對象

 

 

Num2

5

(Number 類型)

Num1

5

(Number 類型)

l  引用類型值:創建新值,複製到為新變數分配的位置上

但是創建的新值實際上是一個指針,指向存儲在堆中的一個對象

特點:兩個變數將引用同一個對象,互相影響

 

複製前的變數對象

 

 

 

 

Obj1

 

(Object 類型)

 

複製後的變數對象 

 

4.1.3傳遞參數

l  訪問變數:按值和按引用

l  函數參數傳遞:只有按值

  1. 向參數傳遞基本類型的值:被傳遞的值複製給一個局部變數(即命名參數,或者

       說arguments對象中的一個元素)

      

      2.   向參數傳遞引用類型的值:按值傳遞,雖然局部作用域中修改的對象會在全局作用域中反映出來

      

【在這個函數內部,obj和person引用的是同一個對象。換句話說,即使這個變數是按值傳遞的,obj也會按引用來訪問一個對象。

如果person是按引用來傳遞的,那麼person就會自動被修改為指向其name屬性值為“Greg”的新對象。

實際上,當在函數內部重寫obj時,這個變數引用的就是一個局部對象了。而這個局部對象會在函數執行完畢後被立即銷毀。】

 

4.1.4檢測類型

l  檢測基本類型(undefined,字元串,數字,布爾值):tpyeof

l  檢測引用類型:instanceof

如果變數是給定引用類型(根據它的原型鏈來識別)的實例,instanceof操作符返回true

 

4.2執行環境及作用域

l  執行環境:定義了變數和函數有權訪問的其他數據,決定了它們各自的行為。

1. 每個執行環境都有一個與之關聯的變數對象

2. 全局執行環境是最外圍的一個執行環境

(根據ECMAScript實現所在的宿主環境不同,表示執行環境的對象也不一樣。在web瀏覽器中,全局執行環境被認為是window對象。所有的全局變數和函數都是作為window對象的屬性和方法)

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

當執行流進入一個函數,函數的環境被推入一個環境棧中。而在函數執行之後,棧將其環境彈出,把控制權返回給之前的執行環境。

 

l  變數對象(variable object):保存執行環境中定義的所有變數和函數

 

l  作用域鏈(scope chain):保證對執行環境有權訪問的所有變數和函數的有序訪問

1. 當代碼在一個環境中執行時,會創建變數對象的一個作用域鏈。作用域鏈的前端,都是當前執行代碼所在環境的變數對象。

2. 作用域鏈中的下一個變數對象來自包含環境,而再下一個變數對象則來自下一個包含環境。這樣,一直延續到全局執行環境;全局執行環境的變數對象始終都是作用域鏈中的最後一個對象。

 

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

-Advertisement-
Play Games
更多相關文章
  • 本節目錄   這是Abp中多租戶、軟刪除、激活\禁用等如此方便的原因 Install-Package EntityFramework.DynamicFilters   定義數據   初始化數據   查詢數據           禁用代碼:   啟用代碼:   參考: https://github.c
  • 本節目錄 事件匯流排大致原理: (1)       在事件匯流排內部維護著一個事件與事件處理程式相映射的字典。 (2)       利用反射,事件匯流排會將實現了IEventHandler的處理程式與相應事件關聯到一起,相當於實現了事件處理程式對事件的訂閱。 (3)       當發佈事件時,事件匯流排會從
  • 本節目錄   學習了一段時間的Abp,領略了一下前輩的架構.總結還是SOLID,降低耦合性. 雖然從架構上說甚至不依賴於DI框架,但實際上在基礎框架中還是有一定的必須依賴Castle Windsor. Abp依靠IOC和AOP實現了大量的自動化. 其中Module設計,是Abp的核心.   Abp的
  • 在引入事件委托之前,首先來看下麵這個例子:點擊改變li的背景顏色。
  • 想要實現這樣一個父元素中的子元素都是居中的 只需在父元素上加樣式 設置為flexbox佈局,方向為縱向排列,第三句是使其居中。 如果三個子元素的距離要自己設定,就設置margin-top或margin-bottom就好了; 如果讓其自動調整,可以給父元素的樣式再加上 這樣剩餘的空間會自動分配到各元素
  • 時光車輪滾滾碾來,前端之路永無止歇.對於這個前端這門精一多專的技術,任何一次技術革新,我們都必須第一時間去瞭解它學習它,比如Web世界里這簇美艷的花朵 HTML5.雖然HTML5發佈之初,許多人(包括我)都覺得普及它還很遙遠,但自發佈以來,許多企業級網站對它的嘗試應用(比如<!doctype htm
  • ajax()方法是jQuery底層的ajax實現,通過HTTP請求載入遠程數據。 參數說明: type:請求方式,“POST”或者“GET”,預設為“GET”。 url:發送請求的地址。 data:要向伺服器傳遞的數據,已key:value的形式書寫(id:1)。GET請求會附加到url後面。 as
  • 簡單js JavaScript 是一個鬆散性的語言 對象屬性卻不想c中的結構體或者c++ 和java的對象, 對象繼承機制 使用原型的prototype(原型鏈),js的分為三部分ECMAScript 、文檔DOM對象、瀏覽器BOM對象 1. 核心(ECMAScript) (語法、類型、語句、關鍵字
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...