什么函数?
和数学中的函数不一样,可以把函数理解为像div一样的盒子
为什么要有函数, 函数功能是什么
帮我们把项目中多个 地方使用到的功能(代码段), 抽离出来。然后在需要的地方调用函数。
一个完整的函数分为两部分
-
定义阶段
-
调用阶段
函数的定义
赋值式定义:
var fn = function () {}
console.log(fn)
声明式定义:
function fn1() {}
console.log(fn1)
解释:
function () {} ---> 匿名函数
function 关键字, 表明后续紧跟一段代码, 是函数
() 内部书写, 参数 后续讲,暂时先记住, 暂时理解为 固定写法
{} 内部书写, 函数调用执行时 的代码(可以理解为 要执行的代码)
function fn1() {} ---> 具名函数
funtion 关键字, 同上
fn1 函数名, 将来可以通过 这个名字(变量) 去调用(去找到)本函数
() 参数, 同上
{} 要执行的代码段, 同上
函数的调用:
赋值式定义
var fn = function () {
console.log(111)
}
声明式定义
function fn1() {
console.log(222)
}
不管函数定义是如何定义的, 调用方式永远只有一种
语法: 函数名()
函数声明式和赋值时的区别
函数声明式和赋值式的区别
1. 书写不同
2. 打印时, 声明式 会带上函数名, 赋值式没有
3. 调用时有差异
声明式: 可以在函数定义前 调用
函数的参数
参数分为两个
形参 函数名后(function) 后边的小括号内部, 每书写一个 就相当于在函数内部声明一个变量, 可以在函数内部去调用。
实参 调用函数时的小括号内部书写的值, 就是实参, 实参与形参为 一一对应的关系 形参与实参会一一对应
如果实参数量少于形参那么前边的形参对应接受值, 没有对应实参的形参值为 undefined。
如果形参数量少于实参那么会一一对应后, 多余的实参无法通过参数获取。 eg:
function fn(a) {
console.log(a)
}
fn(1) // 1
fn(1, 2) // 1
fn(2, 3, 4) // 2
函数的返回值
语法:
return 需要返回的内容
函数默认返回值
我们可以不写 return 函数会默认在代码段最后一行 写上 retrun undefined
我需要写返回值吗?我什么时候需要写返回值?
返回值的书写 取决于 是否需要得到函数内部某一个变量的值, 如果需要可以使用返回值将其返回, 如果不需要我们可以不写
return
具有中断函数执行的功能
如果不想中断函数, 那么一定要将 return 放在函数的最后
除非就是想要通过 return 中断函数的运行
小例子:
-
在 1000 到 2000 的数字内, 需要求出 是 4的倍数, 且不是100的倍数 的那个数字 输出在页面 但是每4个换一行。
var num = 0 // 计数器, 计算达到 4 次时 需要换行 for (var i = 1000; i < 2000; i++) { if (i % 4 == 0 && i % 100 !== 0) { // console.log(i) document.write(i + ' ') num++ if (num == 4) { document.write('<br>') num = 0 } } } -
求质数
unction fn(a) { for (var i = 2; i < a; i++) { // 写 for 循环的实际目的就是为了得到它自身和1之外的 数 if (a % i == 0) { break // 直接停止整个循环 } } /** * 假设 a 为 5 * 第一轮循环 i == 2 条件 i < a 满足 执行循环代码 * 第二轮循环 i == 3 条件 i < a 满足 执行循环代码 * 第三轮循环 i == 4 条件 i < a 满足 执行循环代码 * 第四轮循环 i == 5 条件 i < a 不满足 结束整个循环 * * 假设 a 为 8 * 第一轮循环 i == 2 条件 i < a 满足 执行循环代码 * 此时恰好满足 a % i == 0 那么 if 判断执行 执行代码 break 结束整个循环 * * 此时 i 的值 为 2 * */ // 2. 根据传入的参数决定返回什么值 if (i == a) { // 应该是 质数 return true } else { // 这里 不是 质数 return false } // count == 0 ? (return true) : (return false) // 三目 不能书写 return true 或者 return false } var a = fn(9) // 9 不是质数, 所以最终返回值应该是 false console.log(a) var a1 = fn(7) // 7 是质数, 所以最终返回值应该是 true console.log(a1)