JavaScript基础知识笔记 第四天
函数
函数——代码复用
一、函数使用
1.语法:
function 函数名(){
函数体
}
注意:函数名命名规范与变量命名基本一致,尽量使用小驼峰命名法
2.函数调用
函数名()
案例
需求:
-
写一个打招呼的函数 hi~
-
把99乘法表封装到函数里面,重复调用3次
//1
function sayHi(){
document.write('hi~')
}
//2
function numUse(){
for (let i = 1; i <= 9; i++) {
for (let j = 1; j <= i; j++) {
document.write(` ${i} X ${j}=${i * j} `)
}
document.write('</br>')
}
}
numUse()
numUse()
numUse()
二、函数传参
1.语法:
function 函数名(参数列表(可以一个也可以多个)){
函数体
}
2.函数调用
函数名(传递进去的参数列表)
补:
我们一般把函数名后边的小括号内的参数称为形参(形式上的参数)——可以理解为一个变量,而实参是为其赋值
而当我们调用函数填入括号内的参数,便是实参(实际上的参数)
开发中要尽量保持形参和实参个数一致
案例
需求:采取函数封装的形式:输入2个数,计算两者的和,打印到页面中
function sum(a, b) {
document.write(a + b)
}
sum(1, 2)
注意:
形参没有被赋值时,即undefined+undefined,会等于NaN
要程序严谨要:
function sum(a=0,b=0){
}
说明:这个默认值只会在缺少实参参数传递时,才会被执行。
案例
需求:学生的分数是一个数组,计算每个学生的总分
①: 封装一个求和函数
②: 传递过去的参数是一个数组
③: 函数内部遍历数组求和
function sum(arr=[]){
let sum =0
for(let i=0;i<arr.length;i++){
sum+=arr[i]
}
document.write(sum)
}
三、函数返回值
1.语法
return 数据
即在函数末尾添加return
2.细节
return返回的结果可以交给函数外部使用
return之后的代码不会继续执行,即立即结束当前的函数,所以return后面的数据不要换行写
函数可以没有return
案例
求任意2个数中的最大值, 并返回
求任意数组中的最大值并返回这个最大值
求任意数组中的最小值并返回这个最小值
//1
function max(a=0,b=0){
return a>b?a:b
}
//2
function max(arr=[]){
let maxNum=arr[0]
for(let i=0;i<arr.length;i++){
if(arr[i]>maxNum){
maxNum=arr[i]
}
}
return maxNum
}
//3
function min(arr=[]){
let minNum=arr[0]
for(let i=0;i<arr.length;i++){
if(arr[i]<minNum){
minNum=arr[i]
}
}
return mainNum
}
四、作用域
1.全局变量(let)
全局变量在任何区域都可以访问和修改
2.局部变量(let)
局部变量只能在当前函数内部访问和修改
特殊情况
如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。
变量访问原则
在能访问的情况下,先局部,局部没有找到再找全局
五、匿名函数
没有名字的函数,无法直接使用
1.函数表达式
语法:
let fn=function(){
函数体
}
调用:
fn()
2.立即执行函数
无需调用,直接执行
语法:
//方式1
(function(){})()
//方式2
(function(){}())
注意:多个执行函数需要使用;隔开,否则会报错
作用:防止变量污染
案例
需求: 用户输入秒数,可以自动转换为时分秒
①: 用户输入总秒数 (注意默认值)
②:计算时分秒(封装函数) 里面包含数字补0
③:打印输出
let sec = +prompt('输入总秒数:')
function time(sec) {
let h = parseInt(sec / 60 / 60 % 24)
let m = parseInt(sec / 60 % 60)
let s = parseInt(sec % 60)
h=h<10?'0'+h:h
m=m<10?'0'+m:m
s=s<10?'0'+s:s
return `${h}时${m}分${s}秒`
}
let str = time(sec)
document.write(str)