JavaScript旅途之函数-详细用法(笔记)

函数

认识函数

函数的概念

  • 函数就是封装了一段可被重复执行的代码块,并且可以给这段代码起一个名字,以后就可以通过这个名字来使用这段代码
    //源代码:1-50的累加和
    var a = 0;
    for(var i = 0;i <= 50;i++){
        a += i;
        console.log(a);
    }
    //使用函数
    function sum(num1,num2){
        var a = 0;
        for(var i = num1 ; i <= num2 ;i++){
            a += i;
        }
        console.log(a);
    }
    sum(1,50);

函数的使用

  • 函数的使用分为两步
    • 定义函数
    /*function 函数名(){
      //函数体
    }*/
    //例
    function saiHi(){
        console.log('hello');
    }
    //(1) function:关键字,用来声明函数 小写
    //(2) 函数名:自己起的名字,可以是任意的名字,但是要符合标识符的命名规范 
    //(3) ():小括号,里面可以写参数,也可以不写参数
    //(4) {}:函数体,里面是函数要执行的代码
    //(5) 函数不调用是不会执行的
    
    • 调用函数

    函数的调用就是执行函数体中的代码

      //语法: 函数名();
      //例
      function saiHi(){
        console.log('hello');
     }
      saiHi();//调用函数
    

函数的封装

  • 函数的封装就是把一段代码封装到一个函数中,以后就可以通过函数名来调用这段代码
//练习:封装一个函数,用来求1-50的累加和
function getSum(){
    var a = 0;
    for(var i = 0;i <= 50;i++){
        a += i;
    }
    console.log(a);
}
getSum();//调用函数

函数的参数

  • 函数的参数就是函数体中用来接收外部传入的数据的变量
  • 函数的参数可以是任意类型的数据
  • 函数的参数可以没有,也可以有一个或者多个,多个参数之间用逗号隔开
  • 函数的参数可以是变量,也可以是常量,也可以是表达式
  • 我们可以使用函数的参数实现函数重复的不同的代码

形参和实参

形参:函数定义时小括号中的参数叫做形参

实参:函数调用时小括号中的参数叫做实参

//语法
function 函数名(形参1,形参2,形参3...){
    //函数体
}
函数名(实参1,实参2,实参3...);

形参和实参的执行过程

  • 当函数被调用时,会把实参的值赋值给形参
  • 当函数体中使用到形参时,就相当于使用到了实参的值
function getstring(con){//形参用于接收实参con='好吃' 形参类似于变量
    console.log(con);
}
getstring('好吃');//调用函数
getstring('咸鱼茄子煲');//打印出好吃,再打印出咸鱼茄子煲
//练习:封装一个函数,用来求任意两个数的和
function getsum(num,num1){
	console.log(num+num1);
}
getsum(0,5);
//练习:封装一个函数,用来求任意两个数之间的和
function getsum(num,num1,num2){
for(var i = num ; i <= num1 ; i++)
	num2 += i;
	console.log(num2);
}
getsum(1,100,0);

函数的返回值

  • 函数的返回值就是函数体中的代码执行后的结果
  • 函数的返回值可以是任意类型的数据
  • 函数的返回值可以没有,也可以有一个或者多个,多个返回值之间用逗号隔开
  • 函数的返回值可以是变量,也可以是常量,也可以是表达式
  • 函数的返回值可以是一个函数

return关键字

return关键字用于结束函数的执行,并且把return后面的值返回给函数的调用者

return关键字后面的值就是函数的返回值

return关键字后面的值可以是任意类型的数据

return关键字后面的值可以是变量,也可以是常量,也可以是表达式

return关键字后面的值可以是一个函数

//语法
function 函数名(){
    //函数体
    return 返回值;
}
函数名();
//(1)我们函数只是实现某种功能,最终结果需要返回给函数的调用者函数名();通过return关键字来实现
//2()只要函数遇到return 都把后面的结果 返回给函数的调用者 函数名() = return后面的结果
//例
function getA(){
    return 1;
}
getA();//调用函数
console.log(getA());//打印出1
//练习:利用函数求任意两个数的最大值
function getMax(num,num1){
	if(num<num1){
	return num1;
	}else{
	return num;
	}
	//return num > num1 ? num : num1;
}
console.log(getMax(2,1));
console.log(getMax(11,3));
//练习:求数组最大值
function getArr(num,arr){//接收一个0和数组
    var max = arr[0];//定义一个最大值
	for(var i = num ; i < arr.length ; i++){
		if(arr[i] > max){
		max = arr[i];
		}
	}return max;
}
var a = getArr(0,[1,2,3,10,8,9]);//实参把数据都送过去
console.log(a);
  • return终止函数
  • return后面的代码不会执行
function getA(){
    console.log(1);
    return 1;
    console.log(2);
}
getA();//调用函数

在这里插入图片描述

  • return只能返回一个值.如果用逗号隔开多个,会返回最后一个值
function getA(){
    return 1,2,3;
}
console.log(getA());//调用函数

在这里插入图片描述

//求任意两个数的加减乘除
function getS(num1,num2){
	return [num1+num2,num1-num2,num1*num2,num1/num2];
}
getS(90,80);
console.log(getS(90,80));

在这里插入图片描述

  • 我们的函数return,如果函数没有rutern,默认返回undefined
function getA(){
    console.log(1);//返回1
}
console.log(getA());//调用函数返回undefined

在这里插入图片描述

break,continue和return的区别

break:用于结束循环的执行

continue:用于结束本次循环的执行

return:不仅可以退出循环,还能够返回return语句中的值,同时还能结束当前的函数体的代码

arguments关键字

  • arguments是函数体中的一个关键字,它是一个内置对象,类数组对象
  • arguments中存储了函数调用时传递的实参
  • 当不确定有多少个参数传递时,可以用arguments来接收
//语法
function 函数名(){
    //函数体
    console.log(arguments);
}
函数名(实参1,实参2,实参3...);
function geta(){
    //函数体
    console.log(arguments);//里面存储了所有的实参
}
geta(1,2,3);

在这里插入图片描述

  • 展示时候有中括号,说明展示时是以伪数组的形式展示的
  • 具有索引,有length
  • 可以按照索引方式来使用
  • 不具有push,pop等方法
function geta(){
    //函数体
    console.log(arguments);
	console.log(arguments.length);
	console.log(arguments[2]);
}
geta(1,2,3);
geta(1,2,3,4,5);
geta(1,2,3,4,5,6);

在这里插入图片描述

//练习 利用arguments函数找出最大值
function getMax(){
   var max = arguments[0];
   for(var i = 0 ; i < arguments.length ; i++){
   	
   	if(arguments[i] > max){
   		max = arguments[i];
   		}
   	}return max;
   }
   var a = getMax(1,2,3,4,5,9,15,1,5);
   console.log(a);

在这里插入图片描述

//练习:使用arguments进行冒泡排序操作。
	function bubbleSort(){
		for(var i = 0 ; i < arguments.length - 1 ; i++){//第一趟遍历
			for(var j = 0 ; j < arguments.length - 1 - i ; j++){//第一趟遍历的次数
				if(arguments[j] > arguments[j+1]){//如果arguments[j]的元素为5 > arguments[j+1]的元素为1
					var temp = arguments[j];//建立一个临时变量
					arguments[j] = arguments[j+1];//开始进行变量互换操作 arguments[j] 的元素为 1 索引为 0
					arguments[j+1] = temp;//arguments[j+1] 的元素为 5 索引为 1
				}
			}
		}return arguments;
	}
	var a = bubbleSort(5,1,2,4,3);
	console.log(a);

在这里插入图片描述

//倒转数组
//方法1
function revers(){
	var newArr = [];//创建新的数组
	var j = 0;
	for(var i = arguments.length - 1 ; i >= 0 ; i--){
		newArr[j] = arguments[i];
		j++;
	}return newArr;
}
var a = revers('无敌','寂寞','是');
console.log(a);
//方法2
function reverse(arr){
	var newArr = [];

	for(var o = arr.length - 1 ; o >= 0 ; o--){
		newArr[newArr.length] = arr[o];

	}return newArr;
}
var b = reverse(['无敌','寂寞','是']);
console.log(b);

在这里插入图片描述

//用函数判断是否闰年
function year(a){
	var flag = false;
	if((a%4) == 0 && (a%100) != 0 || (a%400) == 0){
		flag = true ; 
	}return flag
}
console.log(year(2002));

在这里插入图片描述

函数的嵌套调用

  • 函数的嵌套调用:在一个函数中调用另一个函数
  • 函数的嵌套调用,可以把一个复杂的问题分解成一个个小问题,然后分别解决
function es(){
	console.log(520);
	es1();
	console.log('一边去,我只想和js过日子');
}
function es1(){
	console.log(16);
	console.log('东百往事');
}
es();

在这里插入图片描述

//练习,用户输入年份,输出当年的2月有多少天
function Day(){
    var year = parseInt(prompt('判断闰年:请输入年份'));
    if (leapyear(year)){
        alert("29天");
    } else {
        alert("28天");
    }
}

function leapyear(year){
    var flag = false;
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
        flag = true; 
    }
    return flag;
}

Day();

执行思路: 先调用Day()函数,其次输入年份,Day()函数中调用leapyear()函数,判断是否为闰年,如果是闰年,返回true,如果不是闰年,返回false,然后Day()函数中判断,如果是闰年,输出29天,如果不是闰年,输出28天

函数的递归调用

  • 函数的递归调用:在一个函数中调用自身
  • 递归调用的函数,必须要有结束条件,否则会出现死循环
function sum(n) {
  // 基本情况(停止条件)
  if (n === 0) {
    return 0;
  }
  
  // 递归调用
  return n + sum(n - 1);
}

console.log(sum(5)); // 输出 15
/* 
在调用sum(5)时,递归的过程如下:
sum(5)调用sum(4),并将结果与5相加。
sum(4)调用sum(3),并将结果与4相加。
sum(3)调用sum(2),并将结果与3相加。
sum(2)调用sum(1),并将结果与2相加。
sum(1)调用sum(0),并将结果与1相加。
sum(0)达到基本情况,返回0。
然后,每个递归调用返回一个值,它们逐层返回并相加,得到最终的结果15。
 */

函数的两种表达式

  • 函数表达式
  • 函数声明
//函数表达式
//匿名函数
//var 变量名 = function(){}
var a = function(c){
    console.log('我是函数表达式');
    console.log(c);
}
a('您好');
//a不是变量名不是函数名
//函数表达式声明跟声明变量差不多,只不过
//函数表达式也可以进行传递参数

函数表达式声明跟声明变量差不多,只不过函数表达式也可以进行传递参数

  • 小知识:函数内部的变量写成num = 10;也是可以的,但是这个变量就变成了全局变量,函数外部也可以访问到这个变量,所以不建议这样写。
//函数声明
//function 函数名(){}
function b(){
    num = 10;//全局变量
}
b();
console.log(num);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值