// JavaScript函数的容错处理
// 我们函数再执行的过程中,有可能被输入错误的函数数值,会引起函数执行错误
// 我们定义函数的时候,必须要防止错误数据的输入
// 举例,累加求和函数
function myAdd(max , min=1){
// 新增判断,确保 min 最终存储的是较小值,max存储的是较大值
// 当min中存储的数据为较大值时,执行程序
if(min > max){
// 将min和max存储的数据,做一个数据交换
// 确保min存储较小值,max存储较大值
var int = min;
min = max;
max = int;
}
var res = 0;
for(var i = min ; i <= max ; i++){
res += i;
}
console.log(res);
}
// 定义累加求和函数
// 如果输入的实参 第一个数值是 赋值给 max ,第二个数值是赋值给 min
// 如果值输入一个实参,会赋值给 max , min执行默认值,1
// 终止值是 100 , 起始数值默认1
myAdd( 100 );
// 输入两个实参数据,一个赋值max 一个赋值 min
myAdd( 30 , 10 );
// 如果我们输入数据的大小顺序有误
// 先输入了 较小值 后输入的加大值
// max 输入了 1 min 输入了 50
// 会造成 for循环 var i = 50 i <= 1 判断直接接是false 整个循环无法执行的
// 需要在函数中,确保,min存储的是较小数值,max存储的是较大数值
myAdd( 1 , 50 );
// 在函数中 可以通过 return 关键词来定义函数的返回值也就是函数的执行结果
// 如果没有 return 定义,函数的返回值,函数的执行结果是 undefined
// 我们之前定义的 累加求和函数
function myAdd1(max , min=1){
if(min > max){
var int = min;
min = max;
max = int;
}
var res = 0;
for(var i = min ; i <= max ; i++){
res += i;
}
// 当前函数,是通过console.log()向控制台输出执行结果
// 没有通过return关键词,定义执行结果,返回值
// 因此当前函数的执行结果是 undefined
console.log(res);
}
// console.log() 是一个函数,是JavaScript程序本身定义个一个函数
// 这个函数的作用是 将 () 中的参数,向浏览器控制台输出
// 例如 console.log( 100 ) 是向 控制台输出 参数 100 数值
// 这个函数只是向控制台输出结果,自己本身,并没有定义返回值
// 没有定义返回值的函数,返回值一律是 undefined
// console.log( console.log( 100 ) )
// 是向控制台输出 console.log( 100 ) 这个函数的 返回值
// 再次强调 console.log( 100 ) 作用是向控制输出 参数 但是没有返回值
// 返回值 是 undefined
// 那么我们想 控制台 输出 console.log( 100 ) 的返回值
// 结果就是 undefined
// 总结: 控制台输出,页面输出等,都不算是 函数的执行结果,不算是返回值
// 必须是 通过 return 定义的数据数值,才是函数的执行结果,才是返回值
// 这是我们 JavaScript 语法中严格规定的,我们必须遵守
console.log( console.log( 100 ) ) ;
function myAdd2(max,min=1){
if(min > max){
var int = min;
min = max;
max = int;
}
var res = 0;
for(var i = min ; i <= max ; i++){
res += i;
}
// 通过 return 来定义 函数的执行结果,返回值
return res;
}
// 观察两个函数的执行区别
// myAdd1() 因为是 console.log(res) 执行结果会直接在控制台输出
// 但是这个结果 只能在 控制台中看 不能赋值给 变量存储
myAdd1(1,100);
// 有一个变量想存储 执行结果 5050 , 是不能成功的
// 执行结果 就直接 在 控制台输出了 变量是无法存储5050这个数值的
// 变量中存储的是函数的执行结果,是返回值
// 当前 myAdd1() 没有 return 定义 返回值 是 undefined
// a 当中 存储的是 undefined
var a = myAdd1(1,100);
console.log(a);
// myAdd2() 因为是 return res 执行结果 不会 直接在控制台输出
// 但是 可以 作为 执行结果 返回值 赋值给其他变量存储
// 当然,也可以通过 console.log() 来输出函数的执行结果返回值
// 这样操作函数的执行结果返回值就比较灵活方便了
var b = myAdd2(1,10);
console.log(b);
console.log( myAdd2(1,100) )
// 举例:类比一下
// 例如我们 到 蛋糕店 有做出来可以卖的蛋糕 , 还有 放在橱柜里 展示的蛋糕
// 橱柜里展示 的 蛋糕 就是 相当于 console.log() document.write() 输出的
// 只能看,不能吃,你也不能买,就是一个假的蛋糕
// console.log() document.write() 输出的 结果
// 你只能看,不能做任何其他的操作,只能看不能用
// 蛋糕店里,用来出售的蛋糕,你可以买,可以吃,可以拍脸上,爱干什么干什么
// 相当于 我们 return 的 执行结果返回值
// 可以赋值给变量,可以 console.log(),想怎么操作怎么操作
// 函数中 return 的作用
// 1, return 可以定义函数的返回值
// 2, return 可以终止函数中一切内容的执行
// 因此要特别注意定义 return 的位置
// 如果定义位置错误,函数被错误的提前终止,就不会有正确的返回值了
// 因为 return 可以终止函数的执行,因此一个函数中,只能有一个 return
// 如果定义 两个 return ,第二个会被第一个给终止掉,没有作用
// 但是 if() switch 分支结构语句,可以定义情况下,不同的 return 值