JavaScript之返回值

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

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

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

1. 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
2. 如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
3. 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
4. 函数使用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&&n1%100!=0||n1%400==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&&year%100!==0||tear%400===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>









  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值