当前位置: 首页 > news >正文

八、JavaScript函数

一、函数的使用

函数就是封装了一段可以被重复执行调用的代码块 目的:就是让大量代码重复使用
函数使用分为两步:声明函数 和 调用函数

1.声明函数

function 函数名() {
函数体
}

        function sayHi() {
            console.log('hi~');
        }

(1)function 声明函数的关键字 全部小写
(2)函数是做某件事情,函数名一般是动词
(3)函数不调用自己不执行

2.调用函数

函数名();

        sayHi();

调用函数的时候千万不要忘记加小括号

案例:利用函数计算1-100之间的累加和
        function getSum() {
            var sum = 0;
            for (var i = 1; i <= 100; i++){
                sum = sum + i;
            }
            console.log(sum);
        }
        getSum();

二、函数的参数

1. 函数可以重复相同的代码
        function cook() {
            console.log('酸辣土豆丝');
        }
        cook();
        cook();
        cook();
2. 我们可以利用函数的参数实现函数重复不同的代码
        function 函数名(形参1,形参2){  // 在声明函数的小括号里面是  形参 (形式上的参数)

        }
        函数名(实参1,实参2);  // 在函数调用的小括号里面是实参(实际的参数)

执行过程:

        function cook(aru) {  // 形参是接受实参的  类似于一个变量
            console.log(aru);
        }
        cook('酸辣土豆丝');
        cook('大肘子');

函数的参数可以有,也可以没有个数不限

案例:
  1. 利用函数求任意两个数的和
        function getSum(num1,num2) {
            console.log(num1 + num2);
        }
        getSum(10,20);  // 30
        getSum(1,3);  // 4
  1. 利用函数求任意两个数之间的和
        function getSum(num1,num2) {
            var sum = 0;
            for (var i = num1; i <= num2; i++) {
                sum = sum + i;
            }
            console.log(sum);
        }
        getSum(1,3);  // 6
        getSum(1,100);  // 5050

注意点:
(1)多个参数之间用逗号隔开
(2)形参可以看作是不用声明的变量

3. 函数形参和实参匹配问题
function sum(num1, num2) {
	console.log(num1+num2);
}
sum(1,2);  // 3
sum(1,2,3);  // 3
sum(1);  // NaN

1.如果实参的个数和形参的个数一致 则正常输出结果
2.如果实参的个数多于形参的个数 会取到形参的个数
3.如果实参的个数小于形参的个数 多于的形参定义为undefined 最终结果就是NaN
形参可以看做是不用声明的变量 num2 是一个变量但是没有接受值 结果就是undefined

建议:尽量让实参个数和形参相匹配

三、函数的返回值return

1.函数的返回值格式
function 函数名() {
	return 需要返回的结果; 
}
函数名();

(1)我们函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名() 通过return 实现的
(2)只要函数遇到return 就把后面的结果 返回给函数调用者 函数名() = return 后面的结果

2.代码验证
function getResult() {
	return 666;
}
getResult();  
console.log(getResult());  // 666
function cook(aru) {
	return aru;
}
console.log(cook('肘子'));
3.案例
  1. 求两个数的最大值
        function getMax(num1, num2) {
            if (num1 > num2) {
                return num1;
            } else {
                return num2;
            }
        }
        console.log(getMax(5,3));  // 5
        console.log(getMax(2,3));  // 2

三元表达式:

        function getMax(num1, num2) {
            return num1 > num2 ? num1 : num2;
        }
        console.log(getMax(5,3));  // 5
        console.log(getMax(2,3));  // 2
  1. 求数组中的最大值
        function getArray(arr) {
            var max = arr[0];
            for (var i = 1; i <= arr.length; i++){
                if (max < arr[i]) {
                    max = arr[i];
                }
                return max;
            }
        }
        var re = getArray([1,7,3,9,2]);
        console.log(re);  // 7
4.return终止函数

1.return 后面的代码不会被执行
2.return 只能返回一个值,返回多个值的话,只输出最后一个值
3.如果想返回多个值,可以用数组、对象等其他方法

5.其他注意事项

1.函数都是有返回值的。
①如果有return 则返回return后面的值
②如果没有return 则返回 undefined
2.break、continue、return 的区别
①break:结束当前的循环体(如for、while)
②continue:跳出本次循环,继续执行下次循环(如for、while)
③return:不仅可以退出循环,还能够返回return 语句中的值,同时还可以结束当前的函数体内的代码

四、arguments

1. arguments的使用

只有函数才有 arguments 对象 而且是每个函数都内置好了这个arguments

        function fn() {
            console.log(arguments);  // 里面存储了所有传递过来的实参  arguments = [1,2,3]
            console.log(arguments.length);
            console.log(arguments[1]);
            // 可以按照数组的方式便利arguments
            for (var i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
            
        }
        fn(1,2,3);
        fn(1,2,3,4,5);
        // 伪数组  并不是真正意义上的数组
        // 1. 具有数组的 length 属性
        // 2. 按照索引的方式进行存储的
        // 3. 它没有真正数组的一些方法   pop()  push() 等等

在这里插入图片描述
求任意个数的最大值

        function getMax() {
            var max = arguments[0];
            for (var i = 1; i < arguments.length; i++) {
                if (arguments[i] > max) {
                    max = arguments[i];
                }
            }
            return max;
        }
        console.log(getMax(1,2,3));  // 3
        console.log(getMax(1,2,3,4,5));  // 5
        console.log(getMax(11,2,34,444,5,100));  // 444
2. 案例
  1. 利用函数翻转数组
        function reverse(arr) {
            var newArr = [];
            for (var i = 0; i < arr.length; i++) {
                newArr[i] = arr[arr.length-1-i]
            }
            return newArr;
        }
        var arr1 = reverse([1,2,3,4,5]);
        console.log(arr1);
        var arr2 = reverse([1,3,4,6,9]);
        console.log(arr2);
        function reverse(arr) {
            var newArr = [];
            for (var i = arr.length - 1; i >= 0; i--) {
                newArr[newArr.length] = arr[i];
            }
            return newArr;
        }
        var arr1 = reverse([1,2,3,4,5]);
        console.log(arr1);
        var arr2 = reverse([1,3,4,6,9]);
        console.log(arr2);
  1. 函数封装冒泡排序
        function sort(arr) {
            for (var i = 0; i < arr.length-1; i++) {
                for (var j = 0; j < arr.length-i-i; j++) {
                    if (arr[j] > arr[j+1]) {
                        var temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
            return arr;
        }
        var arr1 = sort([1,4,2,9]);
        console.log(arr1);
        var arr2 = sort([11,7,22,999]);
        console.log(arr2);
  1. 函数判断闰年
        function isRunYear(year) {
            // 如果是闰年我们返回 true  否则  返回 false
            var flag = false;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                flag = true;
            }
            return flag;
        }
        var year1 = isRunYear(2000);
        console.log(year1);  // true
        var year2 = isRunYear(1999);
        console.log(year2);  // false

五、函数可以调用另外一个函数

        // 函数是可以相互调用的
        function fn1() {
            console.log(11);
            fn2();  // 在 fn1 函数里面调用了 fn2 函数
        }
        fn1();

        function fn2() {
            console.log(22);
        }

在这里插入图片描述

        // 函数是可以相互调用的
        function fn1() {
            console.log(111);
            fn2();
            console.log('fn1');
        }

        function fn2() {
            console.log(222);
            console.log('fn2');
        }
        fn1();

在这里插入图片描述
案例4:用户输入年份,输出当前年份2月份的天数

        function backDay() {
            var year = prompt('请输入年份:');
            if (isRunYear(year)) {
                alert('当前年份是闰年2月份有29天');                
            } else {
                alert('当前年份是平年2月份有28天');  
            }
        }
        backDay();
        
        function isRunYear(year) {
            // 如果是闰年我们返回 true  否则  返回 false
            var flag = false;
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                flag = true;
            }
            return flag;
        }

六、函数的两种声明方式

  1. 利用函数关键字自定义函数(命名函数)
        function fn() {

        }
        fn();
  1. 函数表达式(匿名函数)
var fun = function() {};
        var fun = function(aru) {
            console.log("我是函数表达式");
            console.log(aru);
        }
        fun('123');

在这里插入图片描述
(1)fun是变量名 不是函数名
(2)函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
(3)函数表达式也可以进行传递参数

相关文章:

  • NAT技术-初级总结
  • MySQL :参数修改
  • springboot请求响应
  • 设计一个高性能的分布式限流系统
  • Redis的消息队列是怎么实现的
  • HarmonyOS开发,深拷贝、浅拷贝的封装和调用
  • Spring Boot 核心知识点:依赖注入 (Dependency Injection)
  • 智慧社区2.0
  • C# 中常见 JSON 处理库的优缺点对比
  • 【设计模式】3W 学习法深入剖析创建型模式:原理、实战与开源框架应用(含 Java 代码)
  • 条款43:学习处理模板化基类内的名称
  • 提示deepseek生成完整的json用于对接外部API
  • 【Film】MovieAgent:自动化电影生成通过多智能体CoT规划
  • Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值
  • 深度学习框架PyTorch——从入门到精通(1)下载与安装
  • flutter 专题 一百零三
  • MySQL如何存储表情符号?
  • LeetCode 第14~16题
  • 【gopher的java学习笔记】如何知道java应用启动过程中加载了哪些class
  • 【2025 最新 Cursor AI 教程 06】Cursor AI 与其他 AI 编码助手的比较
  • 菲律宾选举委员会公布中期选举结果,马科斯阵营选情未达预期
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 中国证券业协会修订发布《证券纠纷调解规则》
  • 巴菲特谈卸任CEO:开始偶尔失去平衡,但仍然保持敏锐的头脑,仍打算继续工作