Day4
- 函数 function name(参数1,参数2){ 代码 函数体 },是代码简化,使代码复用。
- 函数命名规范:(1)和变量名基本一致 (2)小驼峰 (3)使用动词开头
- 函数的调用: 函数名加() function sayHello(){} sayHello( ); 函数写完不是立即调用的,要使用函数名来调用才生效。
- 函数的参数:fucntion(参数列表),例如一个求和的函数,你传入两个参数,计算并且返回这两个参数的和
- 有形参、实参。形参,就是在funtion函数声明时的是形参数,在调用的时采用的是实际参数。保持实际参数和形式参数一致。
- 参数默认设置,形参可以看作变量,如果用户不赋值默认是undefined,
我们在函数声明时:给出默认参数:例如
function getSum(x=0,y=0){ return x+y }
当调用函数getSum时,如果参数参数,使用传入的参数,如果没有传入参数,那就使用默认值。
- 封装一个函数,数组求和。
把数组当作参数传入函数参数,只有数组才有长度,如果函数参数写,一个普通的参数,那么用户输入的其他值,在后面使用arr.length时,就会报错。因此,函数参数写arr=[ ],就避免了,默认给一个空数组。
- 实参可以是变量,可以输入你声明或者赋值的变量。
- 函数的返回值:
例如,prompt函数有返回值,但是alert函数就没有
函数返回值,采用return来返回,return 的结果就是函数的返回值。没有返回值的函数的返回类型就是undefined 。return能结束函数,但是函数执行到return时,直接结束函数。因此return 后面的代码不会执行,因此,return 写在函数的最后面最佳。return 后面的数据不要换行。
返回多个值,return [max,min] 多个,采用数组的形式
- 封装一个函数,求两个数字的最大值、最小值。(使用return来返回,多个返回值)
- 两个同名函数,后面一个会覆盖前面一个
- 函数参数不匹配:(1)参数过多,自动省略多余参数
- 参数过少,少的为undefined
- 作用域:限定变量名有效的范围。
- 全局作用域:作用与代码执行的整个环境(整个script标签(js文件)内)
- 局部作用域:作用与函数内的环境,跟函数关系有关
- 根据作用域的不同,变量可以分为全局变量和局部变量。全局:let定义的、函数(for)之外。局部:let定义的、函数中之内的。
- 特殊情况:如果函数内部直接赋值了一个变量,没有声明,也当作全局变量来看,但是强烈不推荐。
- 形参也是局部变量,,在函数之外也不可以使用。
- 如果函数中还嵌套了函数,在函数嵌套函数中还可以定义函数,局部作用域下还有局部作用域。
- 匿名函数:简单来说就是没有名字的函数。 function(){} 函数没有名字,无法直接使用。
- 匿名函数的使用:
- 函数表达式: let fn=funtion(){ },现在fn这个变量就相当于函数的名字,可以调用(后期WebAPI会使用)
- 立即执行:避免全局变量的污染。 (function(){console.log(1) })() 函数立即执行(第二个小括号写参数,第一个小括号写函数形参列表)
- 案列:把用户输入的时间(秒)自动转换为时,分,秒
- 公式:h=parseInt( s/60/60%24 )
- /* 直接把输入阶段报错也返回本函数,解决学需要刷新
- 问题,然后采用三元输入符号,判断
- */
- 代码: function getTimer() {
- let second = +prompt("请输入秒数:")
- let h, m, s
- if (second <= 0) {
- alert("输入错误!请重新输入!")
- return getTimer()
- }
- if (second > 0) {
- h = parseInt(second / 60 / 60 % 24)
- m = parseInt(second / 60 % 60)
- s = parseInt(second % 60)
- h = h < 10 ? '0' + h : h
- m = m < 10 ? '0' + m : m
- s = s < 10 ? '0' + s : s
- }
- return `转换完毕后是${h}小时${m}分${s}秒`
- }
- document.write(getTimer())
- 逻辑中断:在形参列表不写默认参数,而采用逻辑中断:
- 存在于 && 左边为false就短路 ||左边为true就短路,通过左边的到式子结果。
- 逻辑&&
- false &&22 false&& 3+5 一假则假 左边为假,就不执行右边。例如:
- a=10 conssole.log(false&& a++ ) console.log(a) a为10,++操作没用逻辑中断了
- 逻辑|| 输出 false
- a=10 console.log(11||age++) console.log(a) 一真则真,没必要看左边值,左边不执行。 输出 11
- 特殊: console.log(22&&99) 输出99
- console.log(22||99) 输出22
- console.log(undefined||00) 输出 00 undefined在逻辑中当0(假)
- 转换为布尔型:
- Boolean(“李成林”) Boolean(“ ”) 字符串空为假,其他全真
- 数字0为假,其他全真
- undefined为假
- Null 假
- NaN 假
- Flase 假
- - 减法会使” ”(空字符串为0)
- Null经过数字转换为0 null++1=0
- NaN+1=NaN