JavaScript第6天函数

222 阅读6分钟

函数

为什么需要函数?

作用:是简化代码,方便复用,封装程序功能

掌握函数的基本使用,让代码具备复用能力 理解封装的意义,能够具备封装函数的能力

function. 是被设计为执行特点任务的代码块

    function 函数名(){
        函数体
    }
	function sayHi(){
        document.write(`h1`);
    }

函数使用

  • 函数名命名规范
  • 和变量命名基本一致尽量小驼峰式命名法
  • 前缀应该为动词
  • 命名建议;常用动词约定 can has is get set load

函数

函数的调用语法

//函数调用,这些函数体内的代码会被执行
函数名()
  • 注意:声明(定义)的函数必须调用才会真正被执行,使用()调用函数

封装函数

  • 函数是用funcion关键字声明
  • 函数不调用自己不执行
  • 调用方式:函数名()

函数的复用代码和循环重复代码有什么不同?

  • ​ 循环代码写完即执行,不能很方便控制执行位置
  • ​ 随时调用,随时执行,可重复调用

函数传参

函数的声明和调用

声明语法

​ 参数列表

  • 传入数据列表

  • 声明这个函数需要传入几个数据

  • 多个数据用逗号隔开

  • 调用带参数的函数,需要传递参数,参数是一一对应的第一个参数值 传递给函数的第一个参数。

​ 方法声明的时候,设置的参数叫 形参

​ 形参就是一个形式参数,说明这里需要一个值

  1. 不要使用let定义
  2. 形参相当方法的局部变量,只有在这方法中使用。
  3. 方法的形参在没有设置方法之前只是一个形式占位,在调用的时候,需要接收用户传递的数据,它才是真正的变量
  4. 实参:实际参数,真正存在的值,实参是调用者提供的
  5. 调用方法的过程就是实参为形参赋值的过程。数量保持一致
  6. 开发实际尽量保持形参和实参个数一致,数量对应,类型对应。

函数传递参数的好处?

可以极大的提高了函数的灵活性

函数参数可以分为那两类?怎么判断他们是那种参数?

函数可以分为形参和实参

函数声明时,小括号里面的是形参,形式的参数

函数调用时,小括号里面的是实参,实际的参数

参数中间用什么符号隔开?

逗号

函数案例学生总分

        function getSum(arr){
            //初始值为 let sum = arr[0];
            let sum=arr[0];
              //遍历学生数组
        for(let i=0;i<arr.length;i++){
              //学生分数相加
            sum+=arr[i];  
        }
        //输出学生总分
            console.log(sum);
            document.write(sum);
            // return arr;
        }

        let arr1=[1,23,454,68];
        let arr2=[31,2334,4354,6438];
        getSum(arr1);
        getSum(arr2);

函数返回值

函数是被设计为执行特定任务的代码块

任意函数都有返回值,如果没有手动return 那么函数默认会返回undefined

缺点:把计算后的结果方式写死了,内部处理了

解决:把处理结果返回给调用者

有返回值函数的概念: 当调用某个函数,这个函数会返回一个结果出来 这就是有返回值的函数

	let result=propmt(`请输入你的年龄?`);

​	let result2 = parseInt('123');

​ 使用场景是 return 返回值,打印输出。

用return返回数据

  • ​ 不能同时执行多个return 第一个return生效

  • ​ .函数内部 如果写了return 那么它下面的代码就不会执行

  • .如果一个函数 没有写return 相当于写了return undefined

作用域

常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

每一个变量 都是有作用域的要求,否则就会报错。

全局作用域

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件

局部作用域

作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。

块级作用域

在 for if while大括号里面使用。

变量的作用域

如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐

  • 函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用。

作用域链

​ 只是代码寻找变量的一种机制 ,规定 就近原则。

​ 是判断要根据 函数的定义来判断 而不是函数的调用。

​ 函数的定义来寻找最近的变量

​ 1.先找自己的作用域

​ 2.往外部(父级)的作用域来找

​ 3.继续往外部(父级)来找

​ 4.直到找全局作用域。

如果前面没有使用let 关键字 ,是全局变量。

​ let userName ='af';

​ 都建议定义变量 的时候 都要记得使用let关键字。

求函数数组的最大值

	    <script>
        function getMax(arr){
            let max =arr[0];
        for(let i=0;i<arr.length;i++){
            if(max<arr[i]){
                max=arr[i];
            }
        }
        console.log(max);
        }
        let arr=[1,232,456,89,435];
        getMax(arr);
    </script>

函数数组最小值

    <script>
        function getMin(arr){
            let min=arr[0];
            for(let i=0;i<arr.length;i++){
                if(min>arr[i]){
                    min=arr[i];
                }
            }
            console.log(min);
        }
       getMin([123,12321,321343,54,54,354,5]);
    </script>

函数数组奇数之和

	   <script>
        function getSum(arr){
            let sum=arr[0];
            for(let i=0;i<arr.length;i++){
                if(arr[i]%2 !== 0){
                    sum+=arr[i];
                }
            }
            console.log(sum);

        }
        getSum([25,9,743,32,21]);
    </script>

求两个变量里面中最大值

    <script>
        function getMax(num1,num2) {
            let sum=0;
            if(num1>num2){
                sum=num1;
                console.log(`最大值是;${sum}`);
            }else{
                sum=num2;
                console.log(`最大值是;${sum}`);
            }       
        }
        getMax(23,4);
    </script>

补充知识

匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。

匿名函数:没有实际名字的函数。

首先我们声明一个普通函数:

//声明一个普通函数,函数的名字

function fn(){

console.log("HTML");

}

JS 中作用域分为哪三种? 全局作用域。函数外部或者整个script 有效 局部作用域。也称为函数作用域,函数内部有效 块级作用域。 { } 内有效

根据作用域不同,变量分为哪三种? 全局变量 局部变量 块级变量 有一种特殊情况是全局变量是那种?我们提倡吗? 局部变量或者块级变量 没有let 声明直接赋值的当全局变量看,我们强烈不提倡 还有一种特殊情况,函数内部的形参可以当做局部变量看