浅析Js之”变量”篇

1、JS中变量与函数的使用

1.变量

JS中的数据类型

基本数据类型 引用数据类型
数值(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

(1)普通的var变量,确定要提高。

<scirpt>
console.log(a); //undefined
var a = 100;
console.log(a); //110
</script>
复制代码

(2)循环内部中的var变量,也会提高。

<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>

复制代码

(3)在函数中的var变量,也是能够提高的。

<script>
function f(){
    console.log(a); //undefined
    var a =110;
    console.log(a);//110
}
f();
</script>
复制代码

注意:在函数中的变量的提高,并非提高到了代码段的第一行,而是提高到了函数内部的第一行异步


2.函数

函数的提高

函数在JS中,主要分两类:一类是函数声明 ,另外一类是函数表达式。

(1)函数声明提高

<script>
f();  
function f(){
    console.log("f..."); //f...
}
</script>
复制代码

(2)函数表达式不提高

<script>
g();
var g =function (){
console.log("g...");//报错
}
</script>
复制代码

注意:提高是发生在同一个代码段中,是不能提高到上一个代码段中的。函数

2、进程和线程的区别?

(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运行。

异步阻塞调用:去到别的线程,让别的线程阻塞起来等待结果,本身不阻塞。

异步非阻塞调用:去到别的线程,别的线程一直在运行,直到得出结果。

相关文章
相关标签/搜索