JavaScript 函数详解
转载请注明预见才能遇见的博客:https://my.csdn.net/
原文地址:https://blog.csdn.net/weixin_42787326/article/details/81317398
JavaScript函数详解
目录
案例:- 判断一个数是否是素数(质数),只能被1和自身整除,质数是从2开始
1.函数的概念和作用
函数:把一坨重复的代码封装,在需要的时候直接调用即可
函数的作用:代码的重用
2.函数的定义 看代码
[code]* 函数的定义 * 语法: * * function 函数名字(){ * 函数体-----一坨重复的代码 * } * * 函数的调用: * * 函数名();
[code]//函数定义 function cook() { console.log("切菜"); } //函数调用 cook();
3.案例
//函数需要先定义,然后才能使用
//函数名字:要遵循驼峰命名法
//函数一旦重名,后面的会把前面的函数覆盖
案例:求两个数字的和
[code]function consoleSum() {//函数定义 var num1 = 100; var num2 = 200; var sum = num1 + num2; console.log(sum); } //调用 consoleSum();
案例:求两个数字的最大值
[code]function consoleMax() { var x = 10; var y = 20; console.log(x > y ? x : y); } consoleMax();
案例:求三个数字的最大值
[code]function consoleMax2() { var x = 10; var y = 20; var z = 30; var max = x > y ? (x > z ? x : z) : (y > z ? y : z);//嵌套的三元表达式 console.log(max); } consoleMax2();
案例:求1-100之间所有偶数的和
[code]function everyEvenSum() { var sum=0; for(var i=1;i<=100;i++){ if(i%2==0){ sum+=i; } } console.log(sum); } everyEvenSum();
案例:求一个数组的和
[code]function consoleArraySum() { var sum=0; var arr=[10,20,30,40,50]; for(var i=0;i<arr.length;i++){ sum+=arr[i]; } console.log(sum); } consoleArraySum();
4.函数的参数
* 在函数定义的时候,函数名字后面的小括号里的变量就是参数,目的是函数在调用的时候,用户传进来的值操作
* 此时函数定义的时候后面的小括号里的变量叫参数;写了两个变量,就有两个参数,
* 在函数调用的时候,按照提示的方式,给变量赋值--->就叫传值,把这个值就传到了变量(参数)中
* 形参:函数在定义的时候小括号里的变量叫形参
* 实参:函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值
[code]//函数定义 function consoleSum(x, y) { var sum = x + y;//计算和----功能 console.log(sum);//输出和---第二个功能 }
5.函数的返回值
函数的返回值:在函数内部有return关键字,并且在关键字后面有内容,这个内容被返回了。当函数调用之后,需要这个返回值,那么就定义变量接收,即可
* 如果一个函数中有return ,那么这个函数就有返回值
* 如果一个函数中没有return,那么这个函数就没有返回值
* 如果一个函数中没有明确的返回值,那么调用的时候接收了,结果就是undefined
* (没有明确返回值:函数中没有return,函数中有return,但是return后面没有任何内容)
* 形参的个数和实参的个数可以不一致
* return 下面的代码是不会执行的
[code]function f1(x,y) { var sum= x+y; return sum; console.log("助教才是最帅的"); return 100; } var result=f1(10,20); console.log(result); function getSum(x, y) { var sum = x + y; return sum;//把和返回 } //函数调用 var result=getSum(10, 20); console.log(result+10);
[code]//函数定义: 有参数有返回值的函数 function getSum(x, y) { return x + y;//把和返回 } //函数调用 var result=getSum(10, 20); console.log(result+10); //有参数,有返回值的函数 function f1(x,y) { return x+y; } //有参数,无返回值的函数 function f2(x) { console.log(x); } //无参数,有返回值的函数 function f3() { return 100; } //无参数无返回值的函数 function f4() { console.log("萨瓦迪卡"); }
6.案例
案例:- 求1-n之间所有数的和
[code]function geteverySum(n) { var sum = 0; for (var i = 1; i <= n; i++) { sum += i; } return sum; } console.log(geteverySum(10));
案例:- 求n-m之间所有数的和
[code]function geteverySum2(n, m) { var sum = 0; for (var i = n; i <= m; i++) { sum += i; } return sum; } console.log(geteverySum2(1, 100));
案例;求圆的面积
[code]function getS(r) { return Math.PI * r * r; } console.log(getS(5));
案例:- 判断一个数是否是素数(质数),只能被1和自身整除,质数是从2开始
[code]//用这个数字和这个数字前面的所有的数字整除一次(没有1的,没有自身的) function isPrimeNumber(num) { for(var i=2;i<num;i++){ if(num%i==0){ //说明有一个数字整除了,就没有必要向后继续整除了,此时就已经验证出不是质数 return false; } } return true; } console.log(isPrimeNumber(8)?"是质数":"不是质数");
案例:求一个数组中的最大值和最小值还有和
[code]/** * 给我一个数组,我返回一个数组(最大值,最小值,和) * @param array参数是一个数组 * @returns {*[]}返回值是一个数组,第一个元素值是最大值,第二个元素值是最小值,第三个元素值是和 */ function getArrayMaxAndMinAndSum(array) { var min = array[0];//最小值 var max = array[0];//最大值 var sum = 0;//和 for (var i = 0; i < array.length; i++) { sum += array[i];//和 //最大值 if (max < array[i]) { max = array[i]; }// end if //最小值 if (min > array[i]) { min = array[i]; }// end if }// end for var arr = [max, min, sum]; return arr; } //测试 var resultArray = getArrayMaxAndMinAndSum([1, 2, 3, 4, 5, 6, 7]); console.log("最大值:" + resultArray[0]);//7 console.log("最小值:" + resultArray[1]);//1 console.log("和:" + resultArray[2]);//28
案例:通过函数实现数组反转
[code]function reverseArray(arr) { for (var i = 0; i < arr.length / 2; i++) { var temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } return arr; } console.log(reverseArray([1, 2, 3, 4, 5]));
案例:求斐波那契数列,12---144
[code]//求斐波那契数列,12---144 //1 1 2 3 5 8 13 21 34 55 89 144 function getFib(num) { var num1=1; var num2=1; var sum=0; for(var i=3;i<=num;i++){ sum=num1+num2; num1=num2; num2=sum; } return sum; } console.log(getFib(12));
案例:输入,年月日,获取这个日期是这一年的第多少天
[code]//判断这个年份是不是闰年 function isLeapYear(year) { return year%4==0&&year%100!=0||year%400==0; } //年---月---日:2017年4月28日 function getDays(year, month, day) { //定义变量存储对应的天数 var days = day; //如果用户输入的是一月份,没必要向后算天数,直接返回天数 if (month == 1) { return days; } //代码执行到这里-----说明用户输入的不是1月份 //用户输入的是7月份23日----1,2,3 +23 //定义一个数组,存储每个月份的天数 var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //小于的是输入的月份-1 for (var i = 0; i < month - 1; i++) { days += months[i]; } //需要判断这个年份是不是闰年 if(isLeapYear(year)&&month>2){ days++; } return days; } console.log(getDays(2000,3,2));
7.arguments对象
计算n个数字的和
定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传了几个参数,没办法计算,但是如果在函数中知道了参数的个数,也知道了,每个参数的值.可以
看代码
[code]//定义 function f1() { //获取的是函数在调用的时候,传入了几个参数 //console.log(arguments.length); //使用arguments对象可以获取传入的每个参数的值 console.log(arguments); } f1(10,20,30,40,100,200);//调用
[code]function f1() { //arguments----->数组使用------伪数组--- var sum=0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } return sum; } console.log(f1(10,20,30));
8.函数的其他的定义方式
* 命名函数:函数如果有名字,就是命名函数
* 匿名函数:函数如果没有名字,就是匿名函数
看代码
[code]* 函数表达式: * 把一个函数给一个变量,此时形成了函数表达式 * var 变量=匿名函数; * 例子: * var f1=function (){ * * }; * 如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了 * f1(); * * 注意: * 函数表达式后面,赋值结束后,要加分号
看代码
[code]//函数声明 function f1() { console.log("助教好帅哦"); } f1(); function f1() { console.log("小苏好猥琐哦"); } f1(); //函数表达式 var f2 = function () { console.log("助教没有小杨帅"); }; f2(); f2 = function () { console.log("小杨真的很帅"); }; f2(); //函数自调用 (function () { console.log("阿涅哈斯诶呦"); })(); (function () { console.log("嘎嘎") })();
9.函数也是一种数据类型 看代码
[code]function f1() { console.log("我是函数"); } //如何获取某个变量的类型? typeof console.log(typeof f1); //函数是有数据类型,数据类型:是function 类型的
10.回调函数 看代码
函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数
只要是看到一个函数作为参数使用了,那就是回调函数
看代码
[code]function sayHi(fn) { console.log("您好啊"); fn();//fn此时应该是一个函数 } function suSay() { console.log("我猥琐,我邪恶,我龌龊,小苏说"); } sayHi(suSay);
11.函数作为返回值使用 看代码
[code]//结论:函数是可以作为返回值使用的: function f1() { console.log("f1函数调用了"); return function () { console.log("这是一个函数"); }; } var ff=f1();//调用 //ff就是一个函数了 ff();
JavaScript函数详解
博客地址:https://blog.csdn.net/weixin_42787326/article/details/81317398
阅读更多- JavaScript 函数节流详解及方法总结
- JavaScript 函数模式详解及示例
- 详解javascript立即执行函数表达式(IIFE)
- JavaScript中的apply和call函数详解(转)
- 史上最全javascript parseInt函数详解
- JavaScript 函数使用详解
- JavaScript String.fromCharCode() 函数详解
- [转]javascript console 函数详解 js开发调试的利器
- javascript中字符串替换函数replace()方法详解
- JavaScript 节流函数 Throttle 详解
- JavaScript箭头(arrow)函数详解
- 详解JavaScript中常用的函数类型
- JavaScript 节流函数 Throttle 详解
- JavaScript Function.call() 函数详解
- JavaScript decodeURIComponent() 函数详解
- 详解JavaScript的闭包、IIFE、apply、函数与对象
- javascript正则表达式函数详解 .
- JavaScript中eval()函数用法详解
- JavaScript中的eval()函数详解
- javascript字母大小写转换的4个函数详解