基本数据类型 | 引用数据类型 |
---|---|
数值(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运行。
异步阻塞调用:去到别的线程,让别的线程阻塞起来等待结果,本身不阻塞。
异步非阻塞调用:去到别的线程,别的线程一直在运行,直到得出结果。