老己的JavaScript基础笔记4

19 阅读1分钟

JavaScript基础知识笔记 第四天

函数

函数——代码复用

一、函数使用

1.语法:
function 函数名(){
    函数体
}

注意:函数名命名规范与变量命名基本一致,尽量使用小驼峰命名法

2.函数调用

函数名()

案例

需求:

  1. 写一个打招呼的函数 hi~

  2. 把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)