JavaScript之返回值

xiaoxiao2021-02-28  118

当函数程序运行后的结果外部需要使用的时候,我们不能直接给与,需要通过return返回。

函数内部,return后面的值就是返回值,将函数执行后剩下的结果返回给主调

JavaScript中函数返回值的特点如下:

1. 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined2. 如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值3. 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined4. 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行,所以函数返回至具有切断函数执行的功能。

拿以下例题进行说明:

例一:求圆的周长和面积,代码实现如下:

<script type="text/javascript"> var Perimeter=getPerimeterCircle(1); var Area=getAreaCircle(1); function getPerimeterCircle(r){ // var pi=Math.PI; // var perimeter=2*pi*r; // return perimeter; return 2*Math.PI*r; } function getAreaCircle(r){ // var pi=Math.PI; // var area=pi*Math.pow(r,2); // return area; return Math.PI*Math.pow(r,2); } console.log(Perimeter); console.log(Area); </script> 代码中注释部分为详细解题过程,利用返回值大大减少了代码量。

例二:求3个数中的最大值,代码实现如下:

<script type="text/javascript"> function Max(a,b,c){ var max=a; if(b>max){ max=b; }else if(c>max){ max=c; } return max; } console.log(Max(0,45,-1)); </script> 对以上代码,利用三目运算可以大大减少代码量,将条件利用三目表达式体现,如下代码:

<script type="text/javascript"> function Max(a,b,c){ return (a>b?a:b)>c?(a>b?a:b):c; } console.log(Max(0,45,-1)); </script> 例三:求一组数中的最大值,代码实现如下:

<script type="text/javascript"> var arr=[-3,-2,-1,0,1,2,3]; var maxValue=Max(arr); function Max(array){ var max=array[0]; for(var i=1;i<array.length;i++){ if(array[i]>max){ max=array[i]; } } return max; } console.log(maxValue); </script> 在此程序中,应特别注意函数部分一定应用的是形参,而不是实参,return返回值一定要在整个功能代码块执行完后加上返回值。

例四:翻转数组,返回一个新数组,代码实现如下:

方法一:定义一个新数组,优点是不破坏原数组,方便下次利用原数组

<script type="text/javascript"> var arr1=[3,2,5,8,4,7,6,9]; var arr=Reversal(arr1); function Reversal(array){ var arr2=[]; for(var i=array.length-1;i>=0;i--){ arr2[array.length-1-i]=array[i]; } return arr2; } console.log(arr); </script> 方法二:直接在原数组上进行改变,优点减少变量,提高效率

<script type="text/javascript"> var arr1=[3,2,5,8,4,7,6,9]; var arr=Reversal(arr1); function Reversal(array){ for(var i=0;i<array.length/2;i++){ var temp=array[i]; array[i]=array[array.length-1-i]; array[array.length-1-i]=temp; } return arr2; } console.log(arr); </script> 方法三:不需要函数返回值,直接函数调用

<script type="text/javascript"> var arr1=[3,2,5,8,4,7,6,9]; console.log(arr1); Reversal(arr1); console.log(arr1); function Reversal(array){ for(var i=0;i<array.length/2;i++){ var temp=array[i]; array[i]=array[array.length-1-i]; array[array.length-1-i]=temp; } } </script>

例五: 对数组排序,从小到大,代码实现如下:

<script type="text/javascript"> var arr=[1,2,3,4,4,4,5,678,4]; var arr1=Sort(arr); function Sort(array){ for(var i=0;i<array.length-1;i++){ var flag=true; for(var j=0;j<array.length-1-i;j++){ if(array[j]>array[j+1]){ var temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; flag=false; } } if(flag){ return array; } } } console.log(arr1); </script>对以上数列实现冒泡排序,设置外循环和内循环来确保排序的正确性,设置flag标志以提高程序效率

例六:求阶乘,代码实现如下:

<script type="text/javascript"> var product=Factorial(100); function Factorial(n){ var Product=1; for(var i=2;i<n+1;i++){ Product*=i; } return Product; } console.log(product); </script>例七:求1!+2!+3!+....+n!(函数嵌套)

方法一:内层循环保证阶乘实现,外层循环保证阶乘加和来求出阶乘的和

<script type="text/javascript"> var Sum=Factorial(5); function Factorial(n){ var sum=0; for(var i=1;i<n+1;i++){ var Product=1; for(var j=1;j<i+1;j++){ Product*=j; } sum+=Product; } return sum; } console.log(Sum); </script>

方法二:函数方法嵌套和调用,在加和函数块中调用阶乘函数块

<script type="text/javascript"> console.log(getSumJC(4)); function getJC(number) { var Product=1; for(i=1;i<number+1;i++){ Product*=i; } return Product; } function getSumJC(number){ var sum=0; for(var i=1;i<=number;i++){ sum+=getJC(i); } return sum; } </script>

例八:判断一个数是否是素数

方法一:判断一个数是否是素数,可以从2到本身-1范围内开始判断(最小质数为2),如果使范围优化,可以将其范围缩小至原来范围的1/2;代码实现如下:

<script type="text/javascript"> var bool=true; var Bool=Prime(3); function Prime(n){ for(var i=2;i<=n/2;i++){ if(n%i===0){ bool=false; } } return bool; } if(Bool){ alert("此数为素数!!!"); }else{ alert("此数非素数!!!"); } </script>

方法二:一个数,我们可以拆分成两个数乘积的形式,数与数乘积之间其中两个数相等为其间的平衡点,所以我们可以将其范围缩小为2到这个数的平方根的范围,代码改善后如下:

<script type="text/javascript"> var bool=true; var Bool=Prime(3); function Prime(n){ for(var i=2;i<=Math.sqrt(n);i++){ if(n%i===0){ bool=false; } } return bool; } if(Bool){ alert("此数为素数!!!"); }else{ alert("此数非素数!!!"); } </script>例九:求斐波那契数列Fibonacci中的第n个数是多少? <script type="text/javascript"> var a=1,b=1,c; var C=Fibonacci(12); function Fibonacci(n){ for(var i=3;i<n+1;i++){ c=a+b; a=b; b=c; } return c; } alert(C); </script>

例十:输入某年某月某日,判断这一天是这一年的第几天?

方法一:先判断是否为闰年,再判断为几月份,加上相应月份天数后加上对应的日子,则为最后结果,代码实现如下:

<script type="text/javascript"> var n1=Number(prompt("请输入年份:")); var n2=Number(prompt("请输入月份:")); var n3=Number(prompt("请输入日份:")); var days=0; var data=Days(n1,n2,n3); function Days(n1,n2,n3){ for(var i=1;i<n2;i++){ if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ days+=31; }else if(i==4||i==6||i==9||i==11){ days+=30; }else if(n1%4==0&&n10!=0||n1@0==0){ days+=29; }else{ days+=28; } } days+=n3; return days; } alert("该年第"+data+"天"); </script>

方法二:

1.判断是否是闰年

2.求天数(年判断是否是闰年,月是否超过2月)         (1)把每月的天数组成一个数组,不包含闰年         (2)如果是闰年,而且超过了二月,直接在天数上+1; <script type="text/javascript"> console.log(getDays(2015,3,1)); function getDays(year,month,day){ var arr=[31,28,31,30,31,30,31,31,30,31,30,31]; //把输入的月份之前的天数放入day中(不包含本月) //输入的月份我们把它当做当前的索引值用(所以我们要把月份-1,而且不能相等) for(var i=0;i<month-1;i++){ day=day+arr[i]; } if(month>2&&isRN(year)){ day+=1; } return day; } function isRN(year){ // 要有返回值,将来判断是否是闰年,是否超过2月,如果是添加1天 // (四年一闰,百年不闰,四百年再闰) if(year%4===0&&year0!==0||tear@0===0){ return true; }else{ return false; } } </script>

方法三:不利用函数封装,返回值方法,不利用数组解决,代码实现如下,不建议使用:

<script type="text/javascript"> if(n1%4){ for(var i=1;i<n2;i++){ if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ days+=31; }else if(i==2){ days+=28; }else if(i==4||i==6||i==9||i==11){ days+=30; } } }else { for(var i=1;i<n2;i++){ if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ days+=31; }else if(i==2){ days+=29; }else if(i==4||i==6||i==9||i==11){ days+=30; } } } alert(days+n3); </script>

转载请注明原文地址: https://www.6miu.com/read-2613355.html

最新回复(0)