一、实例对象和函数对象
- 函数对象:将函数作为对象使用时,简称为函数对象
2.实例对象:new 函数产生的对象,简称对象
javascript
<script type='text/javascript'>
//js中所有函数都是Function类的实例
function Fn () { //Fn函数
}
const fn = new Fn() //Fn是构造函数, fn是实例对象(简称为对象)
console.log(Fn.prototype); //Fn是函数对象
/**
* bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,
* 例如,f.bind(obj),实际上可以理解为obj.f(),这时,f函数体内的this自然指向的是obj
*/
Fn.bind({}) //Fn是函数对象
$('#test') // (jQuery函数) $是一个函数,根据选择器查找DOM元素 -- 括号的左边是函数
$.get('/test') // (jQuery函数对象) 调用$函数对象的get方法 ---- 点的左边是对象
</script>
二、回调函数
- 什么是回调函数
-
- 必须是自己定义的
- 我不会亲自调用
- 会自己执行
- 例如setTimeout()中传递的回调函数
- 回调函数的两种类型
同步回调
- 理解:立即执行,完全执行完了才结束,不会放入回调队列中
- 例子:数组遍历相关的回调函数/ promise的excutor函数
异步回调
- 理解: 不会立即执行,会放入回调队列中将来执行
- 例子:定时器回调 / ajax回调 / promise的成功|失败回调
javascript
<script type='text/javascript'>
/**
* 1.同步回调函数
*/
const arr = [1, 2, 3, 4, 5]
arr.forEach(item => { //遍历回调,同步回调函数(就是说只有把forEach里面的回调函数执行完了,foreach才会结束),不会放入队列
console.log(item);
})
console.log('foreach()之后');
/**
* 2.异步回调函数
*/
/**
* js中两种定时器,setTimeout和setInterval的区别
* setTimeout只在指定时间后执行一次
* setInterval以指定时间为周期循环执行
*/
setTimeout(() => { //异步回调函数,会放入队列中将来执行
console.log('timeout callback()');
}, 0)
console.log('setTimeout()之后执行');
</script>
三、JS中的error处理
错误的类型:
- Error错误:所有错误的父类型
- ReferenceError: 引用的变量不存在
- TypeError:数据类型不正确的错误
- RangeError:数据值不在其所允许的范围内
- SyntaxError:语法错误
javascript
<script type='text/javascript'>
/**
* 常见的内置错误
*/
//1.ReferenceError: 引用的变量不存在
console.log(a);//Uncaught ReferenceError: a is not defined
//2.TypeError:数据类型不正确的错误
let b = null
console.log(b.xxx);//Uncaught TypeError: Cannot read property 'xxx' of null
//3.RangeError:数据值不在其所允许的范围内
function fn () {
fn()
}
fn() //Uncaught RangeError: Maximum call stack size exceeded
//4.SyntaxError:语法错误
const c = '''' //Uncaught SyntaxError: Unexpected string
</script>
错误处理:
- 捕获错误:try ... catch ...
- 抛出错误:throw error
错误对象:
- message属性:错误相关信息
- stack属性:函数调用栈记录信息
javascript
<script>
try{
let b
console.log(b.xxx);
}catch(error){
console.log(error.message);
console.log(error.stack);
}
console.log('出错之后');
//2.throw error
function some () {
if (Date.now()%2 === 0){
console.log('当前时间为奇数,可以执行任务');
} else {
throw new Error('当前时间为偶数,无法执行')
}
}
//捕获异常
try {
some()
} catch (error) {
alert(error.message)
}
</script>