1、Error:错误对象
**1、***浏览器自带四种错误类型:可以快速找到自己的错误
语**法错误:SyntaxError - 符号写错了
引用错误:ReferenceError - 没有创建就去使用了
类型错误:TypeError - 不是自己的方法,你却去使用了,最典型的,就是你们经常会undefined.xxx或null.xxx
范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);//d的取值范围只能是0~100之间****
2、只要发生错误,就会报错,会导致后续代码不执行(如果APP报错,那会直接闪退),我们程序不希望报错
错误处理:就算发生错误,也不会报错,不希望抛出错误,而是希望给一个错误提示即可,后续代码依然可以继续允许
语法:
try{
只放入你可能出错的代码
}catch(err){
发生错误的时候才会执行
console.log(err);
}
try...catch...的性能非常差,几乎里面的代码效率会被降到最低,所以不推荐使用
*可以用一个技术代替:if...else... 提前预判
*开发经验:一切的用户都是坏人,都要防一手(!isNaN(x)、正则:把用户控死)
3、抛出自定义错误: throw new Error("自定义提示");
2、*****Function:函数对象:提前创建好的,以后可以反复使用的代码段
1、创建:3种
1、声明方式:function 函数名(形参列表){函数体;return 返回值} - 完整的提前
2、直接量方式:var 函数名=function(形参列表){函数体;return 返回值}
3、构造函数方式:var 函数名=new Function("形参",.....,"函数体;return 返回值");
何时使用:函数体是动态拼接的
2、调用:如果有return,记得接住结果
var 结果=函数名(实参);
3、考点:
1、创建的三种方式
2、作用域:变量的使用规则:优先使用自己的,自己没有找全局,全局没有就报错
3、声明提前:
4、按值传递:
5、重载overload:相同的函数名,根据传入的实参的不同,自动选择对应的函数执行
为什么:减轻程序员负担!
问题:JS不支持重载!
JS不允许多个同名函数同时存在,如果存在,最后的会覆盖之前的所有
解决:在【函数中】有一个对象:arguments对象,不需要我们创建,自带
什么是arguments:是一个类数组对象:但是不是数组,和数组有3个相同点
1、都可以使用下标
2、都可以使用length
3、都可以遍历
作用:***接受住传到函数内部的所有实参,哪怕你不写一个形参
可以做的事儿:
1、实现重载:可以通过在函数内部判断arguments的不同,执行不同的分支操作
2、以后有没有形参无所谓
3、正式开发中,有可能会将多个函数整合为一个函数 - 代码优化
6、***匿名函数:没有名字的函数
1、匿名函数自调:
//此函数只会执行一次,执行后会自动释放,优点,自动释放 - 代替全局写法,提升网页的性能
(function(){
var a=2;
console.log(a);
btn.onclick=function(){
console.log("释放了码");
}
//引用类型:在还有人使用的情况下,是不会自动释放的
})();
2、匿名函数回调:将函数作为实参,传递给了其他函数调用 - 没有名字就是匿名函数,匿名函数只有自调和回调,没有自调,则是回调
1、学习回调函数的目的:让你们知道哪些属于回调函数
arr.sort(function(a,b){return a-b;})
str.replace(reg,function(){})
btn.onclick=function(){}
这些东西都是前辈们规定好的,我们只能学习如何使用的
2、ES6 - 一切的回调函数,都可以简化为箭头函数
3、了解了回调函数的原理
7、*****闭包 - 明天讲,面试题:两链一包(作用域链、原型链、闭包)
作业: 1、使用try...catch版本和if...else...版本保证toFixed不会报错,只给错误提示 2、程序员甲:封装了一个可以根据传入的数字以及传入的小数位数,四舍五入保留小数位数,但是如果传入的不是一个数字, 或者不能被隐式转为数字,就会抛出一个错误 程序员乙:做了一个可以计算金额(可以输入单价、数量、付款金额)的一个函数,为了解决舍入误差,用了程序员甲的函数 如何错误处理(两个版本) 3、滚动轮播 - 缺陷:最后一张会退回到第一张,记得封装函数