摘要:指針指針指針重要的時期說三遍由于對象類型為指針引用在變量復制方面,基本類型和引用類型也有所不同。在瀏覽器中,全局執行環境被認為是對象。
javascript---Symbol類型, 引用類型, 作用域
javascript的引用類型, 即對象類型是我們最常用的的類型, 其中有許多讓我們需要注意的地方, 最新的 , ES6 的推出, 使得對象類型的屬性名不僅僅可以是字符串類型,還可是Simbol 類型--(^_^現在有兩種類型了哦)這里奉上傳送門ES6 阮一峰Symbol 值通過Symbol函數生成。這就是說,對象的屬性名現在可以有兩種類型,一種是原來就有的字符串,另一種就是新增的 Symbol 類型。凡是屬性名屬于 Symbol 類型,就都是獨一無二的,可以保證不會與其他屬性名產生沖突。
Smbol類型
let mySymbol = Symbol(); // 第一種寫法 let a = {}; a[mySymbol] = "Hello!"; // 第二種寫法 let a = { [mySymbol] = "Hello!"; }; // 第三種寫法 let a = {}; Object.defineProperty(a, mySymbol, { value: "Hello!" }); // 以上寫法都得到同樣結果 a[mySymbol] // "Hello!"
引用類型
引用類型(對象類型)是js主要類行,他的用法類似于 c 語言中的指針
js基本類型和引用類型存儲于兩個地方, 基本類型值指的是那些保存在棧內存中的簡單數據段,即這種值完全保存在內存中的一個位置 。而引用類型值則是指那些保存在堆內存中的對象,意思是變量中保存的實際上只是一個指針,這個指針指向內存中的另一個位置,該位置保存對象。
ps. 指針指針指針!!! (^-^ 重要的時期說三遍)
由于對象類型為指針引用, 在變量復制方面,基本類型和引用類型也有所不同?;绢愋蛷椭频氖侵当旧恚妙愋蛷椭频氖堑刂?/p>
let box = "Lee"; //在棧內存生成一個 box "Lee" let box2 = box; //在棧內存再生成一個 box2 "Lee"
let box = new Object(); //創建一個引用類型 box.name = "Lee"; //新增一個屬性 let box2 = box; //把引用地址賦值給 box2
ps. 復制對象的時候要注意你的復制需求, 到底需要潛復制還是深復制
函數參數
對于函數參數, 如果是基本類型則直接按指傳遞, 而如果是引用類型則傳遞的是引用地址--(^_^指針)
執行環境及作用域
執行環境是 JavaScript 中最為重要的一個概念。執行環境定義了變量或函數有權訪問的其他數據,決定了它們各自的行為。
全局執行環境是最外圍的執行環境。在 Web 瀏覽器中,全局執行環境被認為是 window對象。因此所有的全局變量和函數都是作為 window 對象的屬性和方法創建的。
PS:當執行環境中的所有代碼執行完畢后,該環境被銷毀,保存在其中的所有變量和函數定義也隨之銷毀。如果是全局環境下,需要程序執行完畢,或者網頁被關閉才會銷毀。
PS:每個執行環境都有一個與之關聯的變量對象,就好比全局的 window 可以調用變量和屬性一樣。局部的環境也有一個類似 window 的變量對象,環境中定義的所有變量和函數都保存在這個對象中。(我們無法訪問這個變量對象,但解析器會處理數據時后臺使用它)
PS:每個函數被調用時都會創建自己的執行環境。當執行到這個函數時,函數的環境就會被推到環境棧中去執行,而執行后又在環境棧中彈出(退出),把控制權交給上一級的執行環境。
PS:當代碼在一個環境中執行時,就會形成一種叫做作用域鏈的東西。它的用途是保證對執行環境中有訪問權限的變量和函數進行有序訪問。作用域鏈的前端,就是執行環境的變量對象
作用域
javascript設計之初并沒有塊級作用域, 而只有函數作用域(^_^是不是有點反人類)
所以給程序員帶來了不便,不過可以通過立即執行匿名函數來模仿塊級作用域
(function () { var name = "Iris"; })()
ES6: 沒有塊級作用域的語音一切都要歸罪于 var 關鍵字, 于是 ES6 推出了新的關鍵字 let const 現在官方推薦所有的 var 關鍵字都可以用 let 代替, let cost 將存在塊級作用域功能 具體他們的不同可以參考鏈接描述
(function(){ if (4) { var name = "Iris"; } console.log(name);//Iris if (5) { let age = "23"; } console.log(age);//age is not defined })()
ps. name在代碼塊外部是不可見的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107195.html
摘要:通常,它做為一個偏功能性的標記來表示,在全劇中它是唯一的。并且使用來生成,會在存入當前全局上下文中一個結構中,我們稱它為顧名思義,它是全局的,所以使用時我們需要謹慎,尤其是在大型項目中。 ES6中基礎類型增加到了7種,比上一個版本多了一個Symbol,貌似出現了很長時間,但卻因沒有使用場景,一直當作一個概念層來理解它,我想,用它的最好的方式,還是要主動的去深入了解它吧,所以我從基礎部分...
摘要:使用聲明的變量會動被添加到最近的環境中查詢標識符,現在作用域鏈的最前端開始搜索,逐步向上級查詢,直到找到匹配的標識符,在變量查詢中,訪問局部變量要比全局變量更快,因為不需要向上搜索作用域。 基本類型和引用類型的值 基本類型值指的是簡單的數據段;引用類型值指那些可能由多個值構成的對象。不能給基本類型添加屬性,可以給引用類型值動態的添加屬性。 基本類型按值訪問,存放在棧內存中。引用類型按引...
摘要:作用域鏈中的下一個變量對象來自包含外部環境,而再下一個變量對象則來自下一個包含環境。這樣,一直延續到全局執行環境全局執行環境的變量對象始終都是作用域鏈中的最后一個對象標識符解析沿作用域鏈一級一級搜索標識符。 一、寫在前面 最近研究了創建Android虛擬機、vscode結合weex開發Android APP、Vmware裝MAC虛擬機的事,看的內容不夠多,接下來加油 二、變量、作用域和...
摘要:全局變量是最外圍的一個執行環境,代碼在環境中執行,會創建一個作用域鏈,用途是保證對執行環境有權訪問所有變量和函數的有序訪問。作用域鏈中最后一個對象始終是全局執行環境。內部環境可以通過作用域鏈訪問所有的外部環境,外部則不能訪問內部。 1、基本類型和引用類型的值 * 基本類型 : 指的是簡單的數據段,五種基本類型是按值訪問的,可以直接操作保存在變量中實際的值。 * 引用類型 : 指那些可能...
閱讀 2448·2021-11-15 11:38
閱讀 2832·2021-11-02 14:44
閱讀 3812·2021-09-26 10:13
閱讀 3055·2021-08-13 15:02
閱讀 776·2019-08-30 15:56
閱讀 1428·2019-08-30 15:53
閱讀 2358·2019-08-30 13:01
閱讀 3184·2019-08-29 12:57