前端学习笔记!
作為一個前端新人,看了很多關于前端的博客,覺得有必要去記錄點知識點和自己的總結(jié),所以在工作之余寫了這篇文章,該博客有引用到其他文章的內(nèi)容,純屬學習,在此膜拜一下各位前端大大。
一.聲明定義
var es6之前的方法 用于定義變量
let es6的新語法 用于定義跨級作用域本地變量
const es6的新語法 用于定義常規(guī)變量(定義的變量不會被重新定義)
申明了變量沒有賦值打印出來是undefinded,沒有申明變量打印出來為NULL
5.未賦值的變量做計算,它的值為NAN
二.作用域
es6支持塊級作用域,需要用es6的let屬性來聲明變量 例如if、setTimeout等等
if(true){var a = 1; } console.log(a); // 輸出為1當使用let時
if(true){let a = 1; } console.log(a); // a is not defined(…)變量上浮:
javascript會自動將變量的聲明上浮到函數(shù)或者全局的最前面,所以再代碼執(zhí)行前,變量的賦值就已經(jīng)為undefined
三.數(shù)據(jù)類型
6種基礎類型
1.Bollean(布爾值)
2.string(字符串)
3.undefined
4.null
5.Number
6.symbol(ES6新增):
symbol是程序創(chuàng)建并且可以用作屬性鍵的值,并且它能避免命名沖突的風險。symbol與其它類型并不完全相像,symbol被創(chuàng)建后就不可變更,你不能為它設置屬性(在嚴格模式下嘗試設置屬性會得到TypeError的錯誤)。他們可以用作屬性名稱,這些性質(zhì)與字符串類似。另一方面,每一個symbol都獨一無二,不與其它symbol等同,即使二者有相同的描述也不相等;你可以輕松地創(chuàng)建一個新的symbol。這些性質(zhì)與對象類似。
一種對象類型:Object
對象和函數(shù)的區(qū)別在于前者是值的容器,后者是應用程序的過程
四.控制流和錯誤處理
1.塊表達式
塊表達式用于控制流,例如if、while、for
ES6之后有塊域范圍:在ES6中,我們可以把塊域聲明var改成let,讓變量只作用域block范圍。
2.邏輯判斷
判斷為false的特殊值:false、undefined、null、0、NaN、”"。
簡單boolean和對象Boolean類型有倆種區(qū)別 前者是Javascript的一種原始類型,它只有倆種值,true和false
使用Boolean(value)方法可以強制轉(zhuǎn)換任意值為boolean類型
五.內(nèi)存空間
1.堆和棧
JavaScript沒有嚴格的去區(qū)分棧內(nèi)存和堆內(nèi)存,一般它的所有數(shù)據(jù)都存取在堆內(nèi)存里。
堆內(nèi)存的存取方式可以比喻成書架放書,書柜里的書沒有什么先后拿去順序,可以哪區(qū)任何位置的書籍和放回到任何位置,好比在JSON格式的數(shù)據(jù)中,我們存儲的key-value是可以無序的,因為順序的不同并不影響我們的使用,我們只需要關心書的名字。
棧內(nèi)存的存取方式就像一個兵乓球盒子,具有先進后出,后進先出的特點,存儲原理如圖。
2.變量對象
Javascript的執(zhí)行上下文生成的時候,會創(chuàng)建一個叫做變量對象的特殊對象,Javascript的基礎數(shù)據(jù)會保存在該變量對象里
3.引用數(shù)據(jù)類型與堆內(nèi)存
JS的引用數(shù)據(jù)類型例如數(shù)組Array,它們的值是不確定的,引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對象。Javascript不能直接訪問堆內(nèi)存空間,因此我們不能直接操作堆內(nèi)存空間中的變量。因此我們在操作對象的時候其實是在引用該堆內(nèi)存的對象,變量對象里保存的只是來自堆內(nèi)存空間對象的地址,該地址與實際的堆內(nèi)存值相關聯(lián)。
當我們要訪問堆內(nèi)存的引用數(shù)據(jù)類型時,首先從變量對象中獲取該對象的地址指針,再通過地址指針來獲取堆內(nèi)存的數(shù)據(jù)
// DEMO var m = { a: 10, b: 20 } var n = m; n.a = 15;// 這時m.a為15六.執(zhí)行上下文(Execution Context)
每次當控制器轉(zhuǎn)到可執(zhí)行代碼的時候,就會進入一個執(zhí)行上下文。執(zhí)行上下文可以理解為當前代碼的執(zhí)行環(huán)境,它會形成一個作用域。運行包括三種情況:
1.全局環(huán)境
2 函數(shù)環(huán)境
3 eval:
每次當控制器轉(zhuǎn)到可執(zhí)行代碼的時候,就會進入一個執(zhí)行上下文。執(zhí)行上下文可以理解為當前代碼的執(zhí)行環(huán)境,它會形成一個作用域。
在一個javascript的程序執(zhí)行時,會產(chǎn)生多個執(zhí)行上下文,javascript會以堆棧的方式處理它們。
棧底為全局上下文,棧頂為當前上下文
上下文執(zhí)行過程如圖
上下文部分特點
1單線程
2同步執(zhí)行,只有棧頂?shù)纳舷挛奶幱趫?zhí)行中,其他上下文需要等待
3全局上下文只有唯一的一個,它在瀏覽器關閉時出棧
4函數(shù)的執(zhí)行上下文的個數(shù)沒有限制
5每次某個函數(shù)被調(diào)用,就會有個新的執(zhí)行上下文為其創(chuàng)建,即使是調(diào)用的自身函數(shù),也是如此。
執(zhí)行上下文-生命周期
1.創(chuàng)建階段
在這個階段中,執(zhí)行上下文會分別創(chuàng)建變量對象,作用域鏈和this指向
2.代碼執(zhí)行階段
創(chuàng)建完成,開始執(zhí)行代碼,完成變量賦值,函數(shù)引用,以及其他代碼執(zhí)行
總結(jié)
- 上一篇: 基于keras的深度学习基本概念讲解——
- 下一篇: 浏览器厂商开始默认支持WebAssemb