本文主要跟大家分享js基礎---編譯語言與解釋型語言,希望能幫助大家。
1、原始型類型與引用型1.編譯語言與解釋型語言的差異
# 編譯型語言:通篇先編譯出一個文件,程式會自動執行這個文件。
優點:快;
缺點:不能跨平台。
伺服器要求穩定性強,使用Linux系統,客戶端大多使用Windows,產生跨平台問題,編譯型語言產生的編譯檔無法同時多個平台執行。
解釋型語言:編譯一句執行一句,沒有編譯文件,相當於直接編譯成1010機器語言,然後執行。
優點:跨平台;
缺點:稍微慢。
注意:java嚴格意義上不算編譯語言也不是解釋型語言,編譯出檔案後,java虛擬機解釋執行,使java可跨平台。
異步----多件事同時執行;同步----等待一件事完成,再做另一件事。
輪轉時間片:js看似在同時執行兩個動畫,實際上是js將兩個動畫的過程分為無數個稀小的時間片段形成一個棧,每次執行其中一個,爭搶時間片沒有先後順序,順序隨機。然後就按棧的順序執行動畫,看似兩個都在動而已。
IE----trident; Chrome-----webkit/blink; firefox---Gecko; safari-- --webkit; Opera---presto
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
以上是js編譯語言與解釋型語言詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!