js 执行顺序
1、js是‘单线程’语言,执行模式有两种:同步,异步
单线程:只有一条流水线
同步:依次再流水线上执行
异步:流水线旁加了一个临时储物台(任务队列),会把某些模块拿到临时储物台,或者会把临时储物台的某些模块插队到流水线
2、js默认模式是同步模式,按流水线执行:A,B,C,不管A里边代码运行时间多长,都要先执行完A,再执行B,再执行C
A:sssssssssssssssssssssssssss
B: ddd
C: ccccccccc
3、实现异步模式的几种方法
①回调函数(把临时储物台的模块插入到流水线)
②setTimeout(把流水线的模块拿到临时储物台,过一段时间再插入回去)
③Promise对象(把临时储物台的模块插入到流水线)
4、小程序中所有的wx.xxx()接口,也都是异步模式(先执行流水线上非wx.xxx的模块,把流水线上所有的wx.xxx模块先拿到临时储物台执行,等哪个有了返回结果,并且流水线上有空了,也就是流水线上非wx.xxx的模块执行完了,再把哪个插回去)
5、async函数中,代码的执行模式是,异步模式,所有的模块都放在临时储物台上执行,哪个模块执行完了,就先把哪个模块拿到流水线上执行
6、举例
jobs.add({ data: { userName: 'aaa' } }) .then(res => { wx.hideLoading({ success: res=>{ console.log('hideLoading') } }) wx.showToast({ title: '提交成功', icon: 'success', duration: 2000 }) wx.switchTab({ url: '../my/my', }) console.log('aaaa') }) .catch(err => { console.log(err) })
执行顺序:
把wx.hideLoading,wx.showToast,wx.switchTap先放到临时储物台,并执行
执行流水线上的console.log('aaaa'),流水线上有空了,把临时储物台上最先有了返回结果的wx.hideLoading插入回流水线执行,流水线上有空了,又把第二个有了返回结果的wx.switchTab插入回流水线执行
显示顺序:aaaa,hideLoading,跳转
其他:
7、if...else if....else会按照顺序执行,先执行if,再执行else if,再执行else
8、for循环是先执行完内部的循环,再跳出循环,for循环后面的代码,必须for循环完成后才能执行