首頁 >web前端 >js教程 >js編譯語言與解釋型語言詳解

js編譯語言與解釋型語言詳解

小云云
小云云原創
2018-03-17 17:02:282004瀏覽

本文主要跟大家分享js基礎---編譯語言與解釋型語言,希望能幫助大家。

1、原始型類型與引用型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]

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

js編譯語言與解釋型語言詳解

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

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

以上是js編譯語言與解釋型語言詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn