区别实例对象和函数对象
- 函数对象:将函数作为对象使用时,简称为函数对象
- 实例对象:new 函数产生的对象,简称为对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| //括号的左边是函数,点号的左边是对象 //所有函数都是Function的实例对象 function Fn(){//这里Fn是函数
} const fn = new Fn();//这里fn是实例对象(简称对象),Fn是构造函数 console.log(Fn.prototype);//这里Fn是函数对象 Fn.call({});//Fn是函数对象 Fn.bind({});//函数对象才有bind方法, $('#test');//$是jQuery函数 $.get('/test');//$是jQuery函数对象
function Person(params){
}
|
两种类型的回调函数
同步回调
- 理解:立即执行,完全执行完了才结束,不会放入回调队列中
- 例子:数组遍历相关的回调函数/Promise 的 excutor 函数
1 2 3 4 5 6 7 8 9 10 11
| const arr = [1,2,3]; //遍历回调,同步回调函数(只有回调完成,才会执行后面),不会放入回调队列,一上来就执行 arr.forEach(item=>{ console.log(item); }); console.log('forEach之后执行'); 结果: 1 2 3 forEach之后执行
|
异步回调:
- 理解:不会立即执行,会放入回调队列中将来执行
- 例子:定时器回调/ajax 回调/Promise 的成功|失败的回调
1 2 3 4 5 6 7 8
| //异步回调函数,会放入队列中将来执行,先执行启动任务,只是启动,处理需要时间 setTimeout(() => {//异步 回调函数,会放入队列中将来执行 console.log('timeout callback'); }, 0); console.log('setTimeout()之后'); result: setTimeout()之后 timeout callback
|
JS 的 error 处理
目标:进一步理解 JS 中的错误(Error)和错误处理
- 常见错误类型
- Error:所有错误的父类型
- ReferenceError:引用的变量不存在
- TypeError:数据类型不正确
- RangeError:数据值不在其所允许的范围内(如:递归调用超出范围)
- SyntaxError:语法错误
- 错误处理
- 捕获错误:try…catch
- 抛出错误:throw error
未捕获错误,下面的代码不会执行
- 错误对象
- message 属性:错误相关信息
- stack 属性:函数调用栈记录信息