javascript 补充的一些知识点
函数对象与实例对象
- 函数对象
将函数作为对象使用时,简称为函数对象 - 实例对象
new 函数产生的对象,简称为对象
function Fn(){ //Fn 函数}
const fn= new Fn(); //此时的Fn是构造函数 ,fn 是实例对象(简称对象)
console.log(11,Fn.prototype) // Fn是函数对象
Fn.bind({}) // 这个是函数对象调用的方法
JS 的error 处理
类型
- Error
所有错误的父类型 - ReferenceError
引用的变量不存在 - TypeError
数据类型不正确的错误 - RangeError
数据值不在其所允许的范围内 - SyntaxError
语法错误
错误处理
- 捕获错误
try{}catch(e){
}
- 抛出错误
throw
错误对象
- message属性
错误相关信息 - stack属性
函数调用栈记录信息
JS 异步之宏队列与微队列
在 JavaScript 的异步机制中,宏队列(Macro Task Queue) 和 微队列(Micro Task Queue) 是两个非常重要的概念,它们决定了异步代码的执行顺序。
事件循环(Event Loop)
JavaScript 是单线程的,它通过 事件循环(Event Loop) 来处理异步任务。事件循环的大致过程如下:
1. 执行全局同步代码(主线程执行栈)。
2. 清空 微队列。
3. 执行一个 宏任务(从宏队列取出)。
4. 清空 微队列。
5. 重复 3-4。
微队列(Micro Tasks)
常见的微任务来源:
• Promise.then / catch / finally
• MutationObserver
• queueMicrotask
微任务的特点是:在当前宏任务执行完后立即执行,优先级高于宏任务中的其他异步任务。
宏队列(Macro Tasks)
常见的宏任务来源:
• setTimeout
• setInterval
• setImmediate(Node.js)
• MessageChannel
• I/O 操作
• requestAnimationFrame(浏览器专用)
宏任务的特点是:每轮事件循环只会执行一个宏任务,之后才会执行微任务。
执行顺序示例
下面是一个典型的例子:
console.log('start');setTimeout(() => {console.log('setTimeout');
}, 0);Promise.resolve().then(() => {console.log('promise');
});console.log('end');
执行顺序解析:
1. 输出 ‘start’
2. 注册 setTimeout(宏任务)
3. 注册 promise.then(微任务)
4. 输出 ‘end’
5. 清空微队列,输出 ‘promise’
6. 执行 setTimeout 回调,输出 ‘setTimeout’
最终输出顺序:
start
end
promise
setTimeout