9.2函数
函数的定义和调用
//函数function,具有特定功能,
//全局自带。
//函数的定义function 函数名(){}
//函数的调用 函数名()
//不加括号代表访问函数的定义,所以一定要加括号
//看到带括号的是函数
function jacksonYee() {
console.log('hi')
}
console.log(jacksonYee)
jacksonYee()
//调用函数的方法二:var 函数名 = function () {}
var jacksonYee = function () {
console.log('hello')
}
//两种方法调用略有区别
//方法二如果放在最前面,会报错:
//使用方法二function关键字定义的函数,会被预便于到当前作用域顶部(函数提升)
//所以,使用方法二时,一定要先定义后调用(方法一的顺序都可)
函数的调用
不可重复定义,重复定义后并不会报错,所以需注意
重复定义,后面的函数覆盖前面的
如果let定义,会报错
函数的应用:
1. 函数的封装
优点:方便复制、传送,并且结构不会被破坏
缺点:使用较少,有局限,被固定
例:(里面的代码不做要求),无需重复复制粘贴主要代码,直接调用方法名
2.代参函数 内容不会被限制
2.1形参 data(名字可更换)(抽象的概念,吃了什么,吃了饭)
参数值为函数调用时传的对应值
形参的值取决于传送的内容(非常实用)
2.2实参(真实的参数,吃了什么,吃了鸡腿)
2.3在函数结尾处,加return方便把值再次使用
一个函数只能return一次,遇到return就到此为止
例2.1:
function eat(food) {
console.log('千玺在吃'+food)
}
eat('榴莲')
eat('鸭血')
eat('酸奶')
eat('臭豆腐')
eat('螺蛳粉')
效果:
例2.2
function pay(fee, card) {
if (card === '农业银行') fee -= 10
console.log(`使用${card}卡付款,共计${fee}元`)
}
pay(1128, '中国银行')
pay(1219, '农业银行')
pay(1112, '工商银行')
效果:
例2.3.1打印出的结果拿出来再次使用 return
例2.3.2补0操作
旧:
新:
2.4之前学的都可以转成函数,
2.4.1重复使用很多遍的代码,且代码固定,只有时间会变
转函数,把会需变化的内容作为函数参数
2.4.2如果传参了,则取对应的值,如果没有传参,则取当前的值
例2.4.1
旧
新
效果
例2.4.2.1
例2.4.2.2
函数的参数
1.//throw手动报错,抛出异常
if (!b) throw'除数不能为空'
例2.4.3
function chu(a, b) {
if (!b) b = 1
return a / b
}
console.log(chu(10, 20))
Type为0返回年月日,为1返回时分秒,否则返回全部
//年数能被4整数并且不能被100整除,或者能被400整除的是闰年
封装练习
年数能被4整数并且不能被100整除,或者能被400整除的是闰年
let year = 2020
function l(str) {
console.log(str)
}
function leapYear(year) {
return(year%4===0 && year % 100 !== 0) || year % 400 == 0
}
l(leapYear(2020))
l(leapYear(2021))
l(leapYear(2022))
效果
外部js的引进:
练习1