JavaScriptの戻り値

8319 ワード

関数プログラムが実行された後、外部で使用する必要がある場合、直接与えられません.リターンが必要です.
関数の内部では、returnの後の値が戻ります.関数の実行後に残った結果を元の調子に戻します.
JavaScriptの関数の戻り値の特徴は以下の通りです.
1.関数が表示されていない場合はreturn文を使用します.関数にはデフォルトの戻り値があります.undefined 2.関数がreturn文を使用している場合は、再return文の後の値が関数の戻り値となります.3.関数がreturn文を使用している場合は、return文の後の値がありません.関数の戻り値もundefined 4です.関数はturn文を使用します.この関数は、return文を実行した後に停止し、すぐに終了します.つまり、returnの後にある他のコードはすべて再実行されないので、関数は切断関数で実行される機能に戻ります.
以下の例を説明します.
例一:円の周囲と面積を求めて、コードは下記の通り実現します.

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);
コードの注釈部分は詳細な解題過程であり、リターン値を利用するとコード量が大幅に減少します.
例二:3つの数の中の最大値を求めて、コードの実現は以下の通りです.

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));
以上のコードに対しては、3つの目で演算することでコード量を大幅に低減し、条件を3つの目で表現することができます.
<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));
例三:一組の数の中の最大値を求めて、コードの実現は以下の通りです.

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);
このプログラムでは、関数の一部には、実際の参照ではなく、一定の形が適用されています.リターン値は、機能ブロック全体で実行された後に、リターン値を加算する必要があります.
例4:反転配列は、新しい配列を返します.コードは次のように実現されます.
方法1:新しい配列を定義します.利点は元の配列を破壊しないことです.次の利用に便利です.

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);
方法2:直接元の配列に変えて、利点は変数を減らして、効率を高めます.

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);
方法3:関数の戻り値を必要とせず、直接関数の呼び出し

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;
    }
}
例5: 配列の並べ替えに対して、小さい時から大きい時まで、コードは下記の通り実現されます.

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);
は以上の数列に対して発泡体の並べ替えを実現し、外部サイクルと内部サイクルを設定して順序付けの正確性を確保し、プログラムの効率を向上させるためにフラグを設定する.
例六:階乗を求め、コードは以下の通り実現される.

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);
例7:1を求めます.+2!+3!+.+n!(関数ネスト)
方法1:内層の循環は階乗実現を保証し、外層の循環は階乗と階乗の和を保証する.

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);
方法2:関数方法ネストと呼び出し、プラスと関数ブロックで階乗関数ブロックを呼び出します.

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;
}
例八:一つの数が素数かどうかを判断する.
方法の1:1つの数が素数かどうかを判断し、2から1までの範囲で判断を開始することができます(最小素数は2).範囲を最適化すれば、その範囲を元の範囲の1/2に縮小することができます.コードの実装は以下の通りです.

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("     !!!");
}
方法2:一つの数は、二つの数積の形に分割できます.数と数の積の間に、二つの数が同じバランスポイントに等しいので、その範囲を2からこの数の平方根の範囲に縮小できます.コードの改善後、次のようになります.

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("     !!!");
}
例9:フィボナッチの数列を求めます.フィボナッチの中のn番目の数はいくらですか?

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);
ある年のある月のある日を入力して、この日がこの年の何日目かを判断します.
方法1:うるう年かどうかを先に判断し、数月と判断し、該当月の日数を加えて対応日を加えると、最後の結果となります.コードの実現は以下の通りです.

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+" ");
方法二:
1.閏年かどうかを判断する2.日数を求める(年は閏年かどうかを判断し、月は2月を超えるか)
        (1)毎月の日数を一組にし、閏年は含まれない
        (2)閏年であり、かつ二月を超えた場合は、直接日数に+1とする.

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;
        }
}
方法3:関数パッケージを利用しないで、戻り値方法は、配列を利用しないで解決します.コードは以下のように実現します.

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);