基本數據類型 | 引用數據類型 |
---|---|
數值(number ) |
對象(Object ) |
字符串(String ) |
函數(Function ) |
布爾(Boolean ) |
數組(Array ) |
Undefined |
|
空(Null ) |
判斷數據的類型,使用typeof
這個運算符。數組
<script>
console.log(typeof undefined); // undefined
console.log(typeof 'absdef'); // string
console.log(typeof 123456); // number
console.log(typeof true); // boolean
console.log(typeof function(){});//Function
console.log(typeof {}); // object
console.log(typeof []); // object
console.log(typeof null); // object
console.log(typeof console.log);
</script>
複製代碼
加var
的變量會提高,沒有var
的變量不會提高。(提高是指提高到了代碼段的第一行。)bash
<scirpt>
console.log(a); //undefined
var a = 100;
console.log(a); //110
</script>
複製代碼
<scirpt>
console.log(i,j); //undefined undefined
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
}
}
console.log(i,j); //10 10
</script>
複製代碼
<script>
function f(){
console.log(a); //undefined
var a =110;
console.log(a);//110
}
f();
</script>
複製代碼
注意:在函數中的變量的提高,並非提高到了代碼段的第一行,而是提高到了函數內部的第一行異步
<script>
f();
function f(){
console.log("f..."); //f...
}
</script>
複製代碼
<script>
g();
var g =function (){
console.log("g...");//報錯
}
</script>
複製代碼
注意:提高是發生在同一個代碼段中,是不能提高到上一個代碼段中的。函數
(1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元spa
(2)同一個進程中能夠包括多個線程,而且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進程至少包括一個線程。操作系統
(3)進程的建立調用fork
或者vfork
,而線程的建立調用pthread_create
,進程結束後它擁有的全部線程都將銷燬,而線程的結束不會影響同個進程中的其餘線程的結束線程
(4)線程是輕兩級的進程,它的建立和銷燬所須要的時間比進程小不少,全部操做系統中的執行功能都是建立線程去完成的 (5)線程中執行時通常都要進行同步和互斥,由於他們共享同一進程的全部資源code
(6)線程有本身的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有本身的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標誌cdn
阻塞調用是指調用結果返回以前,調用者會進入阻塞狀態等待。只有在獲得結果以後纔會返回。對象
非阻塞調用是指在不能馬上獲得結果以前,該函數不會阻塞當前線程,而會馬上返回。
一個線程/進程經歷的5個狀態,建立,就緒,運行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是說當線程中調用某個函數,須要IO請求,或者暫時得不到競爭資源的,操做系統會把該線程阻塞起來,避免浪費CPU資源,等到獲得了資源,再變成就緒狀態,等待CPU調度運行。
同步:在發出一個同步調用時,在沒有獲得結果以前,該調用就不返回。
異步:在發出一個異步調用後,調用者不會馬上獲得結果,該調用就返回了。
同步的定義看起來跟阻塞很像,可是同步跟阻塞是兩個概念,同步調用的時候,線程不必定阻塞,調用雖然沒返回,但它仍是在運行狀態中的,CPU極可能還在執行這段代碼,而阻塞的話,它就確定不在CPU中跑這個代碼了。這就是同步和阻塞的區別。同步是確定能夠在,阻塞是確定不在。
異步和非阻塞的定義比較像,二者的區別是異步是說調用的時候結果不會立刻返回,線程可能被阻塞起來,也可能不阻塞,二者不要緊。非阻塞是說調用的時候,線程確定不會進入阻塞狀態。
上面兩組概念,就有4種組合。
同步阻塞調用:得不到結果不返回,線程進入阻塞態等待。
同步非阻塞調用:得不到結果不返回,線程不阻塞一直在CPU運行。
異步阻塞調用:去到別的線程,讓別的線程阻塞起來等待結果,本身不阻塞。
異步非阻塞調用:去到別的線程,別的線程一直在運行,直到得出結果。