梯队
- setTimeout/setImmediate 第二梯队
- nextTick 最后一个梯队
所以:
无论nextTick与setImmediate谁在前谁在后,一定是nextTick先执行
第二梯队setTimeout/setImmediate执行顺序
- 谁先谁后都有可能
setTimeout/setImmediate/nextTick执行顺序,主要看node的eventLoop,后面会写。
nextTick、setImmediate和setTimeout回调函数中的this指向谁?
- nextTick指向global
- setImmediate指向Immediate对象
- setTimeout指向Timeout对象
所以,我们一般写代码都用箭头函数,箭头函数中的this指向{},因为文件中的this是{}
setTimeout/setImmediate的传参
- setTimeout从第三个参数开始都是传入第一个参数(函数)的参数
- setImmediate由于没有时间参数,所以从第二个参数开始都是传入第一个参数(函数)的参数
- 一般不定参用剩余参数符接收
setTimeout((...args) => {
console.log(args)
}, 1000, 1, 2, 3)
setImmediate((...args) => {
console.log(args)
}, 11, 22, 33)
node中箭头函数中是否有arguments?是都能打印出arguments?
- 箭头函数中没有arguments
- 箭头函数能打印出arguments
为什么箭头函数没有arguments还能打印出arguments?
因为node环境下箭头函数的arguments是外层的arguments。我们node环境下执行一个文件,该文件其实是被一个函数包裹的,打印的arguments其实就是包裹的函数的参数。
function(exports, require, module, __filename, __dirname){
let fn = () => {
console.log(arguments) // 这里的arguments就是exports, require, module, __filename, __dirname构成的类数组
}
}