function函数封装的各种案例分析

476 阅读1分钟

function函数封装的各种案例分析

1. 利用函数封装[求数组的和]的 案例分析

image.png

<script>
        // 求数组的和函数
        // 要求:
        // 1. 封装一个函数名为 getSum 的函数
        // 2. 功能: 根据传入的**数组**,使得函数的返回值为从**数组中各项数字的和**
        // 3. 测试: 分别以document.write、console.log两种方式来输出函数返回的值

        //第一种办法
        //当利用了伪数组arguments,此时括号可以不填写内容
        function getSum() {

            let sum = 0
            //利用arguments去创建一个伪数组,当用户输入一些数字的时候,可以伪装成数组来求和即可
            for (let i = 0; i < arguments.length; i++) {
                sum += arguments[i] // 表示遍历数组里的每一个元素
            }
            return sum
        }
        let res = getSum(1, 2, 3, 4, 5) //注意这里输入的是个数而不是数组的形式
        document.write(res)


        // 第二种方法  正常利用数组方式去求和
        function getSum(a) {
            let sum = 0
            for (let i = 0; i < a.length; i++) {
                sum += a[i]
            }
            return sum
        }
        let res = getSum([1, 2, 3, 4, 5])
        console.log(res);
        document.write(res)
</script>

2. 用函数封装 [求若干参数的和及平均值] 的案例分析

image.png

<script>
        // 求若干参数的和 和 平均值的函数

        // 要求:

        // 1. 封装一个函数名为 getData 的函数
        // 2. 功能: 用户可以传入**任意数量的参数**,使得函数的返回值为**用户输入的若干参数的和**  和 **平均值**
        // 3. 测试: 分别以document.write、console.log两种方式来输出函数返回的值



        function getData(a) {
            // 凡是需要计算总和的  都要先创建一个箩筐去装  所以先创建 sum和avg 
            let sum = 0
            let average = 0
            for (let i = 0; i <= a.length; i++) { //因为是访问若干参数的和,所以用遍历数组来做
                sum += i
            }
            average = sum / a.length //平均值等于总和 / 数组长度的个数

            return [sum, average]  // 结果需要返回值给调用者 getData () 让用户自己决定用哪种方式输出
        }
        let res = getData([1, 2, 3, 4, 5])  //需要用一个res去装 getData的值 
        console.log(`和为${res[0]} ,平均值为 ${res[1]} `);
        document.write(`和为${res[0]} ,平均值为 ${res[1]} `)
</script>

3. 求圆的半径

image.png

 <script>
        // 求圆的面积函数

        // 要求:

        // 1. 封装一个函数名为 getArea 的函数
        // 2. 功能: 用户可以传入**一个半径值作为参数**,使得函数的返回值为 **圆形的面积(圆的面积=3.14\*r\*r)**
        // 3. 测试: 分别以document.write、console.log两种方式来输出函数返回的值
        let r = prompt('请输入一个圆的半径')
        function getArea(r) {
            return 3.14 * r * r
        }

        let res = getArea(r)
        console.log(res);
        document.write(res)
 </script>

4. 用函数封装冒泡排序

image.png

 <script>
        // 封装冒泡排序函数

        // 要求:

        // 1. 封装一个函数名为 getArr 的函数

        // 2. 功能: 用户可以传入**数组**,从小到大排序后返回新数组

        // 3. 调用2次函数并传入不同的数组,通过log的方式输出排序后的数组查看函数是否封装正确

        function getArr(arr) {
            //数组的下标是要从0开始的,由于i=1,所以在后面需要-1
            for (let i = 1; i <= arr.length - 1; i++) { //一定要<= 不然就只执行一次就结束了
                document.write(`这是轮了第${i}次`)

                for (let j = 1; j <= arr.length - i; j++) { //-i的意思是每一趟每换一次就减少1次长度
                    if (arr[j - 1] > arr[j]) {
                        let stmp = arr[j - 1]
                        arr[j - 1] = arr[j]
                        arr[j] = stmp
                    }
                }
            }
            return arr
        }
        let res = getArr([55, 11, 3, 66, 4])
        console.log(res);
        document.write(res)
 </script>

5.用户输入的秒数 转换为时分秒 不足两位补0 的案例分析

image.png

<script>
        /*
            小时:  h = parseInt(总秒数 / 60 / 60 % 24)
            分钟:  m = parseInt(总秒数 / 60 % 60 )
            秒数:  s = parseInt(总秒数 % 60)
        */

        // 用户输入的秒数 转换为时分秒 不足两位补0
        let times = +prompt('请您输入秒数')


        function getTime(time) {
            let h = parseInt(time / 60 / 60 % 24)
            let m = parseInt(time / 60 % 60)
            let s = parseInt(time % 60)

            // 补0的操作  ctrl+d 快速选中相同的内容
            h = h < 10 ? '0' + h : String(h)
            m = m < 10 ? '0' + m : String(m)
            s = s < 10 ? '0' + s : String(s)
            // s = s < 10 ? '0' + s : s.toString()

            // 不做任何处理 直接返回三个值
            return [h, m, s]
        }

        let res = getTime(times)
        console.log(res);
        document.write(`您输入的秒数为${time},转换的时间为:${res[0]}:${res[1]}:${res[2]}`)
    </script>