淺談JavaScript中的函數問題

前面的話:JavaScript可運行在所有主要平臺的主流瀏覽器上,也可運行在每一個主流操作系統的服務器端上。所以呢,要想成爲一名優秀的全棧工程師,必須懂得JavaScript語言。這是我整理的JS的部分函數問題,供大家參考借閱,有不妥的地方也請多多指教。

1、函數的三要素

   1.1 函數的功能
   1.2 函數的參數

          a. 形參——定義函數的時候,沒有實際的值,給實參佔位

          b. 實參——調用函數的時候,有實際的值;

          c. 當調用函數的時候會把實參複製一份傳遞給函數

              

           d. 函數調用的時候,實參和形參的個數可以不等

           e. 在其他語言中,有重載的概念,即函數的名字相同,但參數個屬不同;但javascript中沒有重載的概念。下面的相同名稱的函數會把上面的函數覆蓋 

   1.3 函數的返回值——返回計算的結果

  1)函數返回,後續的代碼不會執行

  2)如果return後面跟內容了,就返回return後面的內容

  3)如果return後面沒有跟內容,返回undefined,return後面的代碼不會執行

  4)如果函數內部沒有寫返回值,返回undefined

  5)推薦的作法是要麼讓函數始終都返回一個值,要麼永遠都不要返回值

2、函數參數的注意點

                    function funName(a, b) { }

    2.1 判斷輸入的參數是否爲空(過濾掉undefined null NaN " "    0)

        a = a || 0;

        b = b || 0;

    2.1 判斷輸入的參數是否爲數字

3、函數的基本形式(4種)

        ——無參數無返回值

        ——有參數無返回值

        ——無參數有返回值

        ——有參數有返回值

4、/ * * +回車    對函數進行註釋,如下圖:

5、函數調用

    5.1 一個函數內部調用另一個函數的執行過程:

        當f2執行完畢之後,會返回到f1繼續執行後續的代碼;

             

1   function f1() {2                         var a = 10;3                            f2();4                  }5                        f1 ();6                        f1 ();

   5.2 函數對自身的調用稱爲遞歸【自調用函數】

    ——遞歸會消耗資源,當自身調用太多次仍會出現報錯。

    5.3 函數是一種數據類型 function

        ①函數可以作爲另一種函數的參數(如5.1)

        ②函數可以作爲函數的返回值

6、函數定義的兩種方式

    6.1 函數聲明 function fn() { }
    6.2 函數表達式 var myFun = function () {}   //這裏調用的是匿名函數
    6.3 函數聲明和函數表達式的區別:

            i)函數聲明——函數提升

            ii)函數表達式——變量提升(下面會詳細介紹)

7、變量的作用域

    7.1 全局作用域:在任何位置都可以訪問【全局變量】

            i)在script標籤中定義的變量

            ii)不使用var聲明的變量

            iii)在關閉網頁或瀏覽器,全局變量纔會釋放

    7.2 局部作用域:在函數內部聲明一個變量,只能在該函數內部使用【局部變量】

            i)只有在函數內部使用var定義的變量

            ii)超出函數的作用範圍後,局部變量被銷燬

    7.3 javascript中沒有塊級作用域

            i)塊級作用域:在其他語言中,在代碼塊中定義的變量,外部是訪問不到的;

            ii)if 和 for 中使用var定義的變量都是全局變量

8、函數提升和變量提升(過程)

  8.1  函數內部,獲取變量的時候,會先在當前作用域下找,有沒有變量聲明,如果有就返回當前作用域中變量的值
  8.2  如果當前作用域中沒有對應變量的聲明,會返回上一級去找

1)解析器預解析的過程:

    i,解析器

           ①全局作用域 預解析

 a) var num ;
 b) function fun ()

            ②一行一行執行代碼

複製代碼

  a) num = 10;
  b) fun (); 調用fun函數
    i) fun的局部作用域
      One. 預解析
        First.  var num;
      Two. 一行一行執行代碼
        First.   console.log(num);  輸出undefined
        Second.  num = 20;

複製代碼

複製代碼

  var  num;  function fun () {     var num;
     console.log (num );
     num = 20;
  }
  num = 10;
  fun();

複製代碼

 

複製代碼

var num = 10;
 fun();function fun () {        var num;
        console.log (num );
        num = 20;
  } 
// 函數內部訪問外部變量
    var a = 10;    function fn () {
        console.log(a);
    }

複製代碼

  2)變量提升——定義變量的時候,變量的聲明會被提升到作用域的最上面,變量的賦值不會提升

  3)函數提升——JavaScript解析器首先會把當前作用域的函數聲明提前到整個作用域的最前面

9、構造函數與自定義構造函數

  9.1 構造函數:構造一個對象,並且返回的函數

    ——調用構造函數: var student = new Object ();

       ① 構造函數的目的是用來創建對象

       ② 使用new Object()創建對象

       ③ 封裝函數創建多個對象

       ④ 自定義構造函數

  9.2 自定義構造函數

      ① 內存開闢空間,存儲新創建的對象 new Object ();
      ② 會把this設置爲當前對象
      ③ 執行函數內部的代碼,設置對象的屬性和方法
      ④ 返回新創建的對象


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章