回调函数
异步回调
语义通过浏览器提供的接口,最终由浏览器线程,通过事件信号来回调该函数。
异步接口函数的作用域
//异步接口函数的作用域链和普通函数的嵌套调用的机制是一样的,只不过是执行的时间不同。
//编译器在编译异步回调函数的作用域时,不会对在异步接口函数做特殊处理。
//在函数定义时,函数的作用域就已经确定。
//在异步回调函数执行时,它的执行上下文(作用域链)不会变化。下面代码最内层的函数会产生两个闭包。
function foo() {
var a = 100;
const t = setTimeout(() => {
var b = 100;
setTimeout(() => {
console.log(a)
console.log(b)
},1000)
}, 1000);
}
同步回调
异步回调 VS 同步回调
- 改变代码的执行时间,在未来由事件来触发执行。
```javascript
//JS 异步回调
var foo = function () {
setTimeout(bar, 0);
console.log(2); }
var bar = () => { console.log(1); }
foo(); // 2 1
//JS 同步回调 var foo = function () { bar(); console.log(2); }
var bar = () => { console.log(1); } foo(); // 1 2
```