一、函数的定义
1、函数声明:
function 函数名() {
//...
}
特点:无论在函数定义前,还是函数定义后调用,都能执行
为什么都能执行???
因为函数声明方式:函数提升
2.函数表达式
var 变量名=function() {
//....
}
变量名()
特点:只能在函数定义后调用,才能执行
javaScript异步
js中的同步和异步的区别和理解
前端面试中很容易问到的问题就是同步和异步的,其实很多人潜意识是知道怎么用,也大概明白一些,但是就是不知道该怎么表达,怎么去描述这个问题。我们可以按这个思路来回答—why-what-how
why(为什么):js是单线程的,只能处理完一件事再做另外一件事,但是设想如果前面一件事花费的时间特别长,我们就只能一直等着他,就会阻塞下面的进程,这样程序运行时间增长,就会降低用户体验。(这里可能有人会想到,如果js是多线程的,不就解决这个问题了,但是其实这是由他的主要功能决定的,他的功能是与用户互动,以及操作DOM,如果在同一个时间,一个进程创建了这个节点,另一个删除了这个节点,那就很尴尬了)
what(同步和异步是什么):
同步:按照一定的顺序去执行,执行完一个才能执行下一个
异步:执行顺序是不确定的,由触发条件决定,什么时间执行也是不确定的,即使是定时器(下面做解释),异步处理可以同时执行多个。
下面看一个小小的异步的案例
<script>
setTimeout(function() {
console.log(1)
})
console.log(2);
</script>
2 1
上面得执行结果是先打印2,然后再打印1,(下面解释)
如果想知道里面的原理,我们可以从js的执行机制入手:
首先了解两个概念,同步任务和异步任务:
同步任务:只有前一个任务执行完成后,才可执行下一个任务,在主线程中
异步任务:这个队列的所有任务都是不进入主线程执行,进入任务队列,被浏览提供的线程执行,当执行完毕后就会产生一个回调函数,并且通知主线程,在主线程执行完当前所执行的任务后,就会调取最早通知自己的回调函数,使其进入主线程中执行,比如ajax请求,再主线程中呈现的就是请求结果~