1. 程式人生 > 其它 >js基礎知識筆記二

js基礎知識筆記二

函式基礎知識

1,函式的基本格式

①函式宣告:

  `function 方法名/函式的名字(){
     //要執行的程式碼
  }`

②函式呼叫:

  `//函式宣告
  function fn(){
  	console.log(1);
  }
  //函式的呼叫
  fn();`
  注意:在呼叫時,如果沒有加‘()’,會返回函式的方法體。

③函式引數:

  `function func(形參1,形參2){
      //函式執行程式碼
  }
  func(實參1,實參2);//呼叫時傳參`
  情況一:函式的實參和形參的數量應該相同,但是JS並沒有這樣的要求。可以不相同
  情況二:如果函式的實引數量少於形引數量,那麼多出來的形參會預設會undefined
  情況三:如果函式實引數量多餘形引數量,那麼多出來的實參就不能通過形參訪問。函式忽略掉多餘的實參。

④函式返回值:

四種情況:
情況一:如果函式中沒有return關鍵字,那麼函式有預設的返回值undefined (如下)
    `<script>
        function fn(){       
                } 
        console.log(fn());
    </script>`
情況二:如果函式中有return關鍵字,那麼這個關鍵字後面的程式碼是不會執行的 (如下)
    `<script>
    function fn(){
            return '我被返回了';
            alert('我是不會被執行的');
            } 
    console.log(fn());
    </script>`
 情況三:如果函式中有retruen關鍵字,這個關鍵字後面沒有值,那麼這個函式有返回值是undefined (如下)
    `<script>
    function fn(){
            return ;
            } 
    console.log(fn());
    </script>`
 情況四:如果函式中有return關鍵字,這個關鍵字後面有值,那麼這個值就是這個函式的返回值。 (如下)
    `<script>
    function fn(){
            return '前端yyds';
            } 
    console.log(fn());
    </script>`

2,函式型別

①匿名函式(也可以叫做沒有名字的函式)==》實際開發中用的相對較多
     `var a = function(){
  	     console.log('前端開發');
  		}
     a();`
②具名函式
      `function fn(){
      console.log("一個喜歡畫畫的前端小猿人");
      }`
③立即執行函式(又叫做IIFE)==》相比來說開發用的多,用於多個函式的封裝
     `(function (用於接收實參){
      console.log("我是IIFE函式");
     })(也可以傳實參)`

關於立即執行函式的解釋

 IIFE作用
    1,防止外部名稱空間汙染
    2,隱藏內部程式碼暴露介面
    3,對專案的初始化,只執行一次
 IIFE特點
    1,匿名函式自呼叫是在定義的同時執行函式
    2,匿名函式自呼叫只能執行一次
	如果需要一個函式可以執行多次,這個函式必須是有名函式
	如果函式沒有名字要想執行必須是自呼叫,但是隻能執行一次
    3、匿名函式自呼叫,函式整體不會發生預解析,但是函式內部執行程式碼是要去預解析

3,函式的遞迴

函式的遞迴呼叫,就是函式在內部自己調自己
函式的遞迴呼叫是一把雙刃劍,如果設計的好,可以幫我們簡單的處理事情,如果設計不好就是災難
函式的遞迴要想設計好必須有兩個條件
- 必須有一個明顯的結束條件,不能一直遞迴下去
- 每一次呼叫都要有一個趨近結束條件的趨勢

情況一(設計不好的遞迴):

    `<script>
  	function fn() {
  		console.log('設計不好的遞迴');
  		fn();
  	    }
  		fn();
     </script>`

情況二( 防止遞迴名字被修改):

    `<script>
	var n = 0;
	function fn() {
		if (n >= 10) {
			return;
		}
		n++;
		console.log('遞迴部分');
		//fn =1;
		//fn();
           arguments.callee();
		}
	fn();
    </script>`

遞迴的小案例:
實現10的階乘

  `function result(n){
if(n <= 1){
	return 1;
	}
return  n * getFactorial(n - 1);
	}
  console.log(result(10));`