1. 程式人生 > >js基礎知識---編譯語言與解釋型語言,原始型型別與引用型

js基礎知識---編譯語言與解釋型語言,原始型型別與引用型

1. 編譯語言與解釋型語言的區別

編譯型語言:通篇先編譯出一個檔案,程式會自動執行這個檔案。

優點:快;

缺點:不能跨平臺。

伺服器要求穩定性強,用Linux系統,客戶端大多數使用Windows,產生跨平臺問題,編譯型語言生成的編譯檔案無法同時多個平臺執行。

解釋型語言:編譯一句執行一句,沒有編譯檔案,相當於直接編譯成1010機器語言,然後執行。

優點:跨平臺;

缺點:稍微慢。

注意:java嚴格意義上不算編譯語言也不是解釋型語言,編譯出文件後,java虛擬機器解釋執行,使java可跨平臺。

2. js引擎是單執行緒-----同一時間只能做一件事

非同步----多件事同時執行;同步----等待一件事完成,再做另一件事。

輪轉時間片:js看似在同時執行兩個動畫,實際上是js將兩個動畫的過程分為無數個稀小的時間片段形成一個棧,每次執行其中一個,爭搶時間片沒有先後順序,順序隨機。然後就按棧的順序執行動畫,看似兩個都在動而已。

3. 主流瀏覽器----shell和核心

IE----trident;   Chrome-----webkit/blink;   firefox---Gecko;   safari----webkit;    Opera---presto

4. js基礎知識點

a 變數名可以由$ _  英文 數字組成,但是首字母只能是$ _ 英文,另外取名避開特殊含義的單詞,同時兼顧語義性。

b 原始值:null undefined string number boolean ;   引用值:object array function (其實就是物件型別)

原始值---賦值相當於是給一個複製品放在新的變數裡,如果給已經賦值的變數再次賦值,實際上會在記憶體裡將該變數與原來的值切斷索引關係,再次在記憶體裡新的地方開一塊地方索引為這個變數名,值為新的值。ps 直到記憶體提示滿了,你清空一部分東西,然後再存東西,才會覆蓋原先的地方。

var num = 1;
var num1 = num;
num = 2;
console.log(num,num1); //2,1。。。。但是這個num已經不是原來的num了

引用值---相當於是在棧裡索引值為這個變數名,值為堆裡存這個真正的值的地址,堆裡索引為地址,值為真正需要的值,所以變數賦值的時候,相當於是把棧裡的值(地址---堆的索引)賦值給新的變數,導致兩個變數同時指向一個地址,那麼改變這個地址裡的東西就會造成兩個變數的值都改變。ps 如果給變數賦值(一個新的引用值或者原始值),那麼另一個變數不會改變,相當於在堆裡重新開一塊地方,把這個地址給了變數,另一個變數的地址還是不變。

var arr=[1,2];
var arr1=arr;
arr.push(3);//改變同一個地址的arr的內容,兩個變數都會改變
console.log(arr,arr1);//[1,2,3],[1,2,3]
arr=[1];//給arr重新賦值了一個地址,arr1的地址不會發生改變,還是原來的地址
console.log(arr,arr1)//[1],[1,2,3]

具體可以看圖,原始值賦值,就是複製一份給另一個變數。引用值就是複製地址給另一個變數,修改這個地址裡的東西,會導致兩個變數的值都發生改變,引用值重新賦值,相當於重新在棧裡開一塊內容,然後新給一個地址,不影響另一個元素,並且原來的記憶體的地方其實還是佔用的,只是變回了預設索引,找不到而已。

c : 1/0----Infinity(Number型)    0/0---NaN (Number型)   

d : ++a在所在的當前語句前執行a+1,a++在當前語句執行完再執行a+1。即(++a)等於a等於(a+1),(a++)等於a原來的值,a=a+1

以上內容為看查閱資料視訊學習以及結合個人實踐理解總結,如有侵犯並非有意,可通知我進行修改。