1.js的单线程
从开始接触js我们就知道js是单线程的。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。好处在于实现起来简单,撸码的时候按一条线路走下来思路也比较清晰。缺点在于如果有较耗时的任务处理后面的任务会一直排队等待,如果有死循环的话浏览器基本上就假死崩溃了,用户连打出gg的机会都没有。所以说在开发的时候还是多注意这样的问题。
2.解决单线程问题-异步编程
为了弥补单线程的弊端,我们可以采取异步编程的方式。
三种常用的异步编程方法:
1.回调函数
function A (callback) {
//do something
callback()
}
function B () {
//do something
}
function A (B)
回调函数应该是用的最普遍的,大部分第三方工具的小功能和插件都会用到。
例如jQuery的ajax里的suuccess回调,error回调。
$.ajax({
url : url,
type : "GET",
success : () => {
//do something
},
error : () => {
//do something
}
});
2.事件监听
例如angularJs的$watch。
$scope.$watch('data', function (newValue, oldValue) {
//do something
A()
});
创建$scope.$watch(value, callbanck)会对value进行监听,当value变化时会执行callbanck函数。从而达到异步的目的。
3. Promises
在ECMAScript6中,规范了Promises的用法,Promises写入规范也意味着这种异步编程的方式更有优势,更容易被大家接受。还有更重要一点就是当大部分浏览器支持ES6后,使用Promises就不需要依赖第三方库了。解析ES6的文章很多,我就不当搬运工了。附上阮一峰老师的 ECMAScript 6 入门。