一個script標籤就是一個代碼段。數組
特色:函數
1.獨立 當一個一個script裏的內容出錯以後,並不會影響其餘script塊裏的內容,其餘的仍可以正常運行。spa
2.共享,在一個代碼段裏定義的數據,在以後的script裏仍能調用。code
3.代碼段的實現順序只與script標籤的順序有關,依次從上往下執行。cdn
聲明變量有三種方式對象
var 由於script的預編譯機制,用var聲明的變量會被提高到該代碼塊最前處。{blog
聲明和定義的區別:
var a; 這是聲明一個變量a。
var a=1; 在聲明變量的同時給變量賦值,這叫作定義變量。
一樣的,函數內的var會被提高到函數內的第一行。對於函數的提高,須要注意只有函數聲明會被提高,函數表達式並不會。{
var b = function(){} 函數表達式
function m(){} 函數聲明
複製代碼
} }ip
let let並不會被預編譯提高,可是let只在當前的代碼塊裏有效,不能跨script代碼段調用。內存
暫時性死區:在let聲明變量以前,不能使用該變量
tmp=233; let tmp;會報錯,由於在聲明tmp以前,不能使用tmp。
一樣,若是是let聲明在局部做用域中,在這以前若是在全局做用域裏使用也會報錯。
複製代碼
const 不經常使用,下次再說。作用域
js裏的數據類型分兩種:
1.基本數據類型(棧區)
數值,字符串,布爾,undefined,null。
2.引用數據類型(堆區)
對象object,函數,數組。
複製代碼
判斷數據的類型的方法:typeof var a =1; console.log(typeof a);
變量是用來存儲數據的,由變量名和數據組成,分別在堆和棧裏建立一個內存空間,棧裏放數據,堆裏放棧裏數據位置的地址。例如寫 var a=2;
賦值操做:{
如圖所示,將a賦值給b的操做是給b也建立一個空間,將a的數據複製一份給b,並非讓懟裏面存儲的地址指向a的地址。
對於基本數據類型而言:
A == B
比較a,b的類型是否一致。一致,直接比較他們保存在棧區的值。
若是類型不一致,先進行數據類型的轉換。而後再比較。
A === B
先作類型判斷,若是一致(不一致,直接false),再作值的比較,相同爲true,不等爲false。
對於引用數據類型
A==B
沒有類型比較這一步(都是一個類型,引用類型)。直接判斷保存在棧區的值(保存在堆區的真實的數據的地址)是否一致。
A === B 與A == B是等價的。
建議:若是你但願對兩個值進行比較,請你必定要使用:
===
把字面量寫在 左邊。
複製代碼
}
變量的做用域:
1.全局變量 直接設置在代碼塊中的變量,做用於整個代碼塊。
2.局部變量 設置在函數中的變量被稱做局部變量,其做用域只在函數內,在函數外的代碼塊中並不能被調用。
3.就近原則 對於同一個變量的屢次賦值,會根據就近原則決定。
首先函數b內部的var a被提高到函數第一行,因此第一次輸出時a沒有賦值默認underfined。
b內的a只做用在函數b內,可是由於函數內的var a 要比外面的var a近 ,因此內部的把外部的覆蓋了。
複製代碼
塊級做用域: 在script中,並無塊級做用域{},只有函數的{}能劃分塊級做用域。