本篇來源:像天天騎共享單車同樣,不知道本身爲何可以掌握平衡,也不記得是如何學會的。曾經還有一些特殊技能(以下圖),如今也不會了。只會慢悠悠的騎着。。。JS基礎也有這種用進廢退的感受,這種感受很是很差。碰巧翻出了一本老書《Javascript核心概念及實踐》,因而便結合筆記以及一些曾經記錄的碎片知識總結了這篇JS基礎。html
Javascript簡述
一丶語言特性
Javascript是一門動態的、弱類型、基於原型的腳本語言。
- 動態性:對象在聲明時不須要定義屬性及類型。能夠隨時更改對象結構。
- 弱類型:變量在聲明時不須要指定數據類型。類型和值是關聯的而不是和變量關聯。
- 基於原型:每一個對象都有prototype屬性,即原型。
二丶基本概念
1.數據類型
- Javascript中數據類型分爲兩種:
- 基本數據類型(string,number,boolean,underfined,null)
- 對象類型(object,array,function)
- 數據類型間的轉換:
- 手動:Object.stringify(OBJ)、Object.parse(str)、valueOf()、toString()等方法
- 自動:例如:if(判斷條件)時,判斷條件若是不是布爾值會自動轉換爲布爾值。
- 檢測數據類型:typeof、instanceof
2.變量
- 變量的定義:變量是對值在存儲空間的引用。
- Javascript中數據類型分爲兩種:
- 基本類型:變量直接訪問數據值(棧)
- 引用類型:變量是其引用地址,指向數據存儲的位置(堆)
三丶對象和原型
1.JS中的對象
- 定義:對象是屬性的集合(以及一個原型對象)
- 對象的屬性:K-V對
- K:屬性的名字,是一個字符串
- V:屬性的值,任意JS對象
- 全局對象
JS引擎在初始化時,會構建一個全局對象。在瀏覽器環境中,這個全局對象就是window對象。全部在頂級做用於下生命的變量均可以看做window對象的屬性。
2.原型
- 原型對象和原型鏈
- prototype: 每一個對象都有一個prototype屬性,叫作原型對象.它是一個對象或null,
- __ proto : 每一個實例函數都有一個 proto __屬性,叫作原型.它其實就是構造函數的prototy.
- constructor 每一個原型對象都有一個constructor屬性,叫作構造函數.也就是咱們進行面向對象編程過程當中定義的構造函數.
- 原型鏈:
在 JavaScript 中,若是想訪問某個屬性,首先會在實例對象的內部尋找,若是沒找到,就會在該對象的原型(__ proto __)上找,咱們知道,對象的原型也是對象,它也有原型,若是在對象的原型上也沒有找到目標屬性,則會在對象的原型的原型上尋找,以此內推,直到找到這個屬性或者到達了最頂層null。在原型上一層一層尋找,這便就是原型鏈了。
- 繼承
因爲原型鏈查找是之下而上的,返回最早遇到的屬性。經過這個機制能夠完成繼承和重載
3.面向對象:
面向對象的思想是將待解問題抽象爲程序中的對象。而後經過對象間的協同合做完成功能,經過功能的集合完成整個項目
編程
四丶函數
在Javascript中函數自己也是對象,與其餘任何內置的對象同樣.
1.函數對象
- 建立函數是什麼?
在全局做用域下,建立函數的過程其實就是對全局對象添加一個屬性的過程,只不過屬性的值是一個函數類型的對象.其餘做用域也是如此.
- 建立的方法
- var fuc=new Function()
- function fuc(){}
- var fuc = function(){}
2.函數的參數
- 函數對象在生成時,產生一個類數組對象--arguments.不管函數是否有形參,實參都會以數組的形式,保存在這裏.
3.函數做用域
- Javascript中的做用域爲詞法做用域,即在定義(預編譯)階段就肯定下來了,並不是在執行階段肯定的.詳情
- Javascript的函數在局部做用域內運行,若內部對變量沒有定義,能夠訪問外部變量.
- 調用對象:在一個函數執行的時候,函數的參數和其局部變量最做爲函數調用對象(this指向)的屬性就行存儲.能夠理解爲存儲做用域信息的對象
- 做用域鏈能夠看作調用對象組成的鏈式結構.全局做用域下的函數做用域鏈上就會有兩個對象--自身的調用對象+全局對象
JS執行過程
js中的函數做用域及預編譯的理解 事件循環主要介紹JS解釋執行過程當中同步,異步的執行過程
bash
JS預編譯執行過程 做用域、做用域鏈閉包
1.語法分析
定義: 代碼在執行前會被通篇掃描一遍,這個過程就作語法分析.app
2.預編譯
3.解釋執行
-
事件循環: 在JavaScript執行時,同步任務會被放入執行棧中依次執行.異步任務掛起,在返回結果時(一般是回調函數),放入任務隊列.當執行棧的同步任務已經執行完成時,將最早進入任務隊列的任務加入到執行棧中執行。去任務隊列讀取任務到執行棧中去執行,這個過程是循環往復的,這即是 Event Loop,事件循環。
-
執行棧:瀏覽器執行隊列
-
任務隊列:異步回調暫存
this相關
關於 this 的解釋說明
定義:this關鍵字是一個對象.取決於當前調用該函數的對象,也就是執行時的對象。
- 使用 call 和 apply 時,若是給 this 傳的不是對象,JavaScript 會使用相關構造函數(例如:new String())將其轉化爲對象
- bind 方法會建立一個新函數,新函數的 this 會永久的指向 bind 傳入的第一個參數
- 箭頭函數會從做用域鏈的上一層繼承 this。同 bind 同樣,箭頭函數也很「頑固」,咱們沒法經過 call 和 apply 來改變 this 的指向
閉包
做用域和上下文環境
閉包
很是不巧端午期間生病了,6.8日吐了整整一天,脫水有些嚴重.6.9晚上好不少了.不少東西沒來得及整理細化.又得爛尾了,難受!!!!