js是单线程语言,在单个线程上运行代码很容易,因为你不必处理在多线程环境中出现的复杂场景——例如死锁。但是在一个线程上运行也非常有限制。由于 JavaScript 只有一个调用堆栈,当某段代码运行变慢时会发生什么?
调用栈中的函数调用需要大量的时间来处理,那么这会发生什么情况呢?例如,假设你想在浏览器中使用 JavaScript 进行一些复杂的图片转码。
你可能会问?这算什么问题?事实上,问题是当调用栈有函数要执行,浏览器就不能做任何事,它会被堵塞住。这意味着浏览器不能渲染,不能运行其他的代码,它被卡住了。如果你想在应用里让 UI 很流畅的话,这就会产生问题。
而且这不是唯一的问题,一旦你的浏览器开始处理调用栈中的众多任务,它可能会停止响应相当长一段时间。大多数浏览器都会这么做,报一个错误,询问你是否想终止 web 页面。
那么,如何在不阻塞 UI 的情况下执行复杂的代码,让浏览器不会不响应?解决方案就是异步回调。
回调函数就是作为参数传递给另一个函数的函数,并在父函数完成后执行
详细链接https://juejin.im/post/59e85eebf265da430d571f89
this指向:
1、this的指向是函数执行时确定的,而不是函数定义时确定,this最终指向的是那个调用它的对象。
2、粗暴理解为:调用执行函数时,“.”前面是什么,this就是什么。前面没有对象,就是window了。
回调函数callback中的this指向window
在Javascript编程中回调函数经常以几种方式被使用,尤其是在现代web应用开发以及库和框架中:
- 异步调用(例如读取文件,进行HTTP请求,动态加载js文件,加载iframe资源后,图片加载完成执行回调等等)
- 事件监听器/处理器
- setTimeout和setInterval方法
- 一般情况:精简代码