<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
const callbacks = []
let pending = false
function flushCallbacks() {
pending = false
const copies = callbacks.slice(0)
callbacks.length = 0
for (let i = 0; i < copies.length; i++) {
copies[i]()
}
}
let microTimerFunc
const p = Promise.resolve()
microTimerFunc = () => {
p.then(flushCallbacks)
}
function nextTick(cb, ctx){
callbacks.push(() => {
if(cb) {
cb.call(ctx)
}
})
if(!pending) {
pending = true
microTimerFunc()
}
}
nextTick(function(){
console.log(this.name);
}, {name: 'Berwin'})
</script>
</body>
</html>