js——函数篇

一、认识函数

**函数:**就是一个装有特定任务(代码块)的容器(箱子),通过函数调用实现可以重复使用这块代码。
函数体:实现功能的内容 就是大括号里面的内容

function fn(){
     函数体
}

函数声明和调用:

  • 声明和调用二者缺一不可
  • 函数声明:就是将特定任务的代码块写清楚;
  • 函数调用:函数名()
//函数声明
function fn(){
//函数体
   let str="哈哈哈哈"
   console.log(str)
}
//函数调用
fn()

函数封装:将一些常用的代码(函数体)包在函数中,包的过程就是封装。

不传入参数的js代码

案例一:
实现1-100的和:

 <script>
        function fn () {
            let sum = 0
            for (let i = 1; i <= 100; i++) {
                sum += i
            }
            console.log(sum)
        }
        fn()
    </script>

案例二:实现两个数的和

 <script>
        function fn () {
            let num1 = 10
            let num2 = 304
            console.log(num1 + num2)
        }
        fn()
    </script>

会发现,我们使用的变量数值都是我们手动在函数内部调用的,因为我们使用函数就是看中了函数的复用性,减少了代码量,如果我们每次使用都需要更改函数内部的变量值,那么就会失去函数的灵活性,所以引出了参数

二、认识函数参数

分为形参和实参

引用上文1-100的和的案例,如果想要实现50-200的和怎么计算?如果改变数字,太麻烦,——参数,如下案例:
形参和实参一一对应,也就是实参50对应形参a,实参100对应形参的b,一般来说,形参和实参数量相同

<script>
//函数声明包含的就是形参
        function fn (a, b) {
            let sum = 0
            for (let i = a; i <= b; i++) {
                sum += i
            }
            console.log(sum)
        }
        //函数调用里面包含的就是实参
        fn(50, 100) 

形参相当于变量

可以说函数形参在函数执行的过程中“相当于”变量。它们在函数被调用时获得值,并在函数执行期间存储和操作这些值。

如果没有实参传递过来默认是 undefined
因为我们认为形参相当于变量,所以,没有实参,也就是实参的值在函数调用的时候没有传递给形参,那么没有赋值的变量默认就是undefined。如该案例没有传入实参:

 <script>
        function fn (a, b) {
            let sum
            for (let i = a; i <= b; i++) {
                sum += i
            }
            console.log(sum)
        }
        //没有传入实参
        fn() 
    </script>

实参也可以是变量

 <script>
        function fn (a, b) {
            let sum = 0
            for (let i = a; i <= b; i++) {
                sum += i
            }
            console.log(sum)
        }
        let num1 = +prompt("请输入第一个数字:")
        let num2 = +prompt("请输入第二个数字:")
        //实参变量
        fn(num1, num2)

因为形参的默认值是undefined,所以给它赋予个初值

function fn(x = 0, y = 0) {}

形参实参本质

形参的作用:本质就是函数内部声明变量,可以看做局部变量
实参的作用:就是给形参赋值
案例:传参,关于数组

 <script>
        function getArrValue (arr = []) {
            let sum = 0
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i]
            }
            console.log(sum)
        }
        // 加入实参能得到正确结果
        getArrValue([1, 765, 786, 54, 45])
        // 未加上实参的,因为默认数组为空,所以结果为0,不会有报错;
 //因为在调用函数的时候,会有arr.length,此时如果没有传入实参,检测不出传入的数据是数组就会报arr.length的错
        getArrValue()
    </script>

相同变量名访问原则:就近原则

匿名函数: 和具名函数差不多,区别是在调用的时候具名函数可以写任何位置,但是匿名调用一定要写在声明函数的后面

   <script>
        let fn = function () {
            console.log(1)

        }
        fn()
    </script>

返回值的作用是让函数清除的明白比起输出结果,返回结果比较有用,返回结果可以让其他程序使用这个结果
把结果返回给函数的调用者
返回值返回给了函数的调用者
return结束的是函数,break结束的是for循环和switch

 <script>
        function getSum (x, y) {
            return x + y
        }
        let sum = getSum(1, 2)
        console.log(sum);
    </script>

return与console.log有区别,前者是把结果返回给了函数调用者,便于其他程序使用这个结果,而后者是为了直接输出结果

死记硬背 形参和实参一一对应,返回值给函数调用者,返回值可以是数组也可以是一个数值,只要是数据即可。

有关实参形参的一些案例

案例一:

  <script>
        function fn (x, y) {
            return x + y
        }
        console.log(fn(30, 34));
    </script>

案例二:使用三元运算符求最大值

 <script>
        function getMax (x, y) {
            // 使用到了三元运算符,如果x大于y,结果就为x;否则就为y
            return x > y ? x : y
        }
        // 相当于 let max=getMax(434,656)=656
        let max = getMax(434, 656)
        console.log(max);   
    </script>

案例三:求数组中的最大值

<script>
        function getArrMax (arr = []) {
            let max = arr[0]
            for (let i = 1; i < arr.length; i++) {
                if (max < arr[i]) {
                    max = arr[i]
                }
            }
            return max
        }
        let Arrmax = getArrMax([32, 65, 76, 43])
        console.log(Arrmax);
    </script>

案例四:求数组中的最小值

 <script>
        function ArrMinValue (arr = []) {
            let min = arr[0]
            for (let i = 0; i < arr.length; i++) {
                if (min > arr[i]) {
                    min = arr[i]
                }
            }
            return min
        }
        let ArrMin = ArrMinValue([45, 65, 675, 54, 234, 321, 45])
        console.log(ArrMin);
    </script>

案例五:求数组中的最大值和最小值

  <script>
        function getArrValue (arr = []) {
            let max = arr[0]
            let min = arr[0]
            for (let i = 1; i < arr.length; i++) {
                if (max < arr[i]) {
                    max = arr[i]
                }
                if (min > arr[i]) {
                    min = arr[i]
                }
            }
            return [max, min]
        }
        let newArr = getArrValue([4738, 5487, 453, 65, 543])
        console.log(`最大值是:${newArr[0]}`)
        console.log(`最小值是:${newArr[1]}`);
    </script>

断点调试

即:(查看函数的执行过程): js中断点测试,source,选中一行,然后刷新,然后箭头
在这里插入图片描述

作用域

  • 全局作用域和局部(函数)作用域
  • 全局作用域声明的变量为全局变量,局部作用域声明的变量为局部变量

匿名函数

不加函数名并且把函数赋值给变量

    <script>
        let fn = function () {
            console.log(1)
        }
        fn()
        let fn1 = function (x, y) {
            console.log(x + y)
        }
        fn1(1, 4)
    </script>

立即执行函数

两种表达方式 ; 多个立即执行函数使用分号进行分开

    <script>
        // 方式一 (function(){})()
        (function () {
            console.log(1)
        })()
            // 方式二:(function(){}())
            (function (x, y) {
                console.log(x + y)
            }(8, 0))
    </script>
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值