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