定義函數

定義函數(自定義函數)javascript

  函數就是功能、方法。函數可以幫咱們封裝一段代碼,這一段代碼會具有某一項功能,函數在執行時,封裝這一段都會執行一次,實現某種功能。java

  並且,函數能夠屢次調用。算法

1、函數的定義和調用編程

語法:模塊化

 定義:把須要實現的功能預先作好函數

 執行:在須要的時候執行這個功能,並且能夠根據須要屢次執行spa

定義:function name(){ }3d

執行:name();code

語法解釋:orm

function   定義函數的關鍵字

name       函數名稱

 ()         參數集

 {}         函數體,執行的代碼都放在{}

 

//定義一個函數,函數就是一組語句的集合
 function haha(){
       console.log(1);
       console.log(2);
       console.log(3);
       console.log(4);
 }
 haha(); //調用haha函數
haha(); //調用haha函數
 haha(); //調用haha函數

 

函數的意義1:在出現大量程序相同的時候,能夠封裝爲一個function,這樣只調用一次,就能執行不少語句。

2、函數的參數

定義在函數內部的語句,都是相同的,可是實際上能夠經過「參數」這個東西,來讓語句有差異。

定義函數的時候,內部語句可能有一些懸而未決的量,就是變量,這些變量,要求在定義的時候都羅列在小括號中

function fun(a){
  console.log("第"+ a +"次說愛你");
 }
fun(100);
fun(1);
fun(2);
fun(3);

運行結果:

 

實參(實際參數)和形參(形式參數)

羅列在function小括號中的參數,叫作形式參數;調用時傳遞的值,叫作實際參數。每次調用均可以傳遞不一樣的參數

function fun(a,b){
   console.log(a + b);
}
fun(3,5); //輸出8
fun(8,20); //輸出28
fun("10",24); //輸出1024,作的是連字符串
fun(10);    //輸出NaN,由於計算的就是10+undefined = NaN
fun(10,20,30,40,50); //輸出30,只有前兩個參數被形參接收了,後面的參數無視

函數的意義2:在調用一個函數的時候,不用關心函數內部的實現細節,甚至這個函數是你上網抄的,能夠運用。

function sum(m,n){
   var s = 0;
   for(var i = m; i <= n;i++){
       s = s + i;
   }
   console.log(s);
}
sum(1,100); //5050 計算1+....+100
sum(10,13); //10+11+12=13
sum(10,10000);
sum(13,10); //輸出0,因此你就知道了函數的順序關機,定義順序是什麼,傳遞順序就是什麼。
sum(1,6);

3、函數的返回值

 

函數能夠經過參數來接收東西,更能夠經過return的語句來返回值,「吐出」東西。

 

function sum(a,b){
  return a+b; //如今這個函數的返回值是a+b的和
}
console.log(sum(2,3));//sum沒有輸出功能,要用console.log輸出,計算sum(2,3)實際上成爲一個表達式,須要計算,計算後就是5
console.log(sum(3,sum(4,5)));//輸出12,實際上有兩次執行了sum函數,先執行最內層,計算出9,而後sum(3,9),結果就是12

 

函數能夠接收不少值,返回一個值。

函數意義3:模塊化編程,讓複雜的邏輯變得簡單。

函數只能有惟一的return,有if語句除外。

程序碰見return,將當即返回結果,返回調用它的地方,而不執行函數內後面剩餘的語句。

function fun(){
  console.log(1);
  console.log(2);
   return; //返回一個空值,undefined
 console.log(3);  //這行語句不執行,由於函數已經return了,因此會終止執行後面的代碼
}
console.log(fun());

結果爲:

4、應用函數簡化編程-模塊化

 

實現前提:函數有返回值,能夠做爲其餘函數執行時傳的實參。

 

習慣將複雜工做,進行一步步的分工,將一部分工做的結果做爲下一步工做的條件。

 

將程序中某個單獨的功能製做成單獨函數,這就是造輪子的過程。

 

業務邏輯上:將全部的輪子進行拼裝。

 

將程序分紅有層次的模塊,製做過程當中一部分函數要有返回值,執行結果做爲另外一些模塊的參數、條件。

 

 案例:輸出1~1000的全部的質數。所謂質數,就是隻有1、本身兩個約數,沒有其餘約數

邏輯思惟:約數個數→判斷質數 

   <script type="text/javascript">
         //封裝約數個數的函數:  能傳入一個數字,實現這個數約數的個數
      function yueshugeshu(a){
            var count=0;
            for(var i=1; i<=a; i++){
                 if(a%i==0){
                    count++;
                 }
            }
            return count;   //返回這個數約數的個數
         }

      //判斷是不是質數,若是一個函數名字取is,就暗示將返回布爾值。一般是真假作法,不是規定
       function isZhiShu(m){
         if(yueshugeshu(m)==2){
            return true;
         }else{
            return false;
         }

       }


   //判斷1到1000的質數
    for(var i=1; i<=1000; i++){
        if(isZhiShu(i)){
            console.log(i);
        }
    }

    </script>

5、函數的遞歸

 

函數能夠本身調用本身,就是遞歸。

function haha(){
  console.log("哈哈");
   haha(); //調用本身
}
haha();

案例

斐波那契數列就是經典的遞歸算法:

輸出斐波那契數列:

1123581321345589144233...

只須要一個函數,就能夠搞定所有問題

fib(n)   就能獲得第n位的數字

fib(2) = 1

fib(5) = 5

fib(6) = 8

fib(10) = 55

      function fib(n){
             if(n==1 || n==2) {
                return 1;
             }else{
                return fib(n-1)+fib(n-2)
             }
         }
         // -點點計算
         for(var i=1; i<=55; i++){
            console.log(fib(i));
         }

6、函數表達式

 

定義函數除了使用function以外,還要一種方法,就是函數表達式。就是函數沒有名字,稱爲「匿名函數」。

 

爲了從此可以調用它,咱們會把這個匿名函數,直接賦值給一個變量。

var haha = function(){
   console.log(1)
}
haha();

等價於

function haha(){
   console.log(1);
}
haha(); //之後想調用這個函數的時候,就能夠直接使用haha變量調用

7、函數聲明的提高(預解析)

 

//先調用
fun(); //能夠輸出,由於函數有函數聲明頭提高的特性
fun();
fun();
//後定義
function fun(){
   console.log("我是函數,我執行了");
}

 

JS在執行前,會有一個預解析的過程,把全部的函數聲明,都提高到最最開頭,而後再執行第一行語句。

因此,function定義在哪裏,都不重要,程序總能找到這個函數

 

fun2();
var fun2 = function(){ //這是函數表達式,而不是function定義法
   console.log("我是函數,我執行了");
}

 

結果爲

函數聲明會被提高,可是函數表達式卻不會被提高

8、函數是一個引用類型

 

以前說過,基本類型:numberstringBooleanundefinednull

 

引用類型也有不少種:objectfunctionarrayRegExpMathDate

 

var haha = function(){
}
function fun(){
}
console.log(typeof haha); //引用類型中的function類型
console.log(typeof fun); //引用類型中的function類型
相關文章
相關標籤/搜索