js調用函數時傳入的參數個數與函數定義時的參數個數不符時的操作

轉截自:https://www.cnblogs.com/daixiaotian/p/6423691.html

 

1.在js中函數沒有重載的概念,如果聲明瞭多個重名的函數,不管函數的形參個數是否一樣,只有最有一個有效,其他的函數聲明都是無效的。比如說聲明瞭兩個函數fn(),第一次聲明時沒有形參,第二次聲明時形參有兩個,則在調用fn()時不管有沒有傳入參數,都是調用後聲明的那個函數。假如說調用時只傳入了1個參數,例如fn(1),則1會賦給函數的第一個形參,而第二個形參不會賦值,如果有用到,就會當undefined處理,可能會報錯。如果調用時傳入了3個參數,例如fn(1,2,3),則1會賦給第一個形參,2會賦給第二個形參,3是用不上的,但是不會報錯。

2.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

<html>

  <head>

    <title>

      函數調用測試,參數個數和函數聲明不一樣多

    </title>

    

    <script language="JavaScript">

      function  needTwoPara(p1,p2){

                var a=arguments;

                var result='我是個需要2個參數的函數\n'

                                     +'您輸入的參數的個數爲:'+a.length+'\n'

                for(var i=0, len = a.length; i < len; i++){

                        result=result+'第'+(i+1)+'個參數爲:'+a[i]+'\n'

                    }

                result+='以上是用arguments來獲得參數\n';

                result+='下面用變量來獲得參數:\n';

                result+='p1:'+p1+'\n';

                result+='p2:'+p2+'\n';

            alert(result);

        }

     </script>

    </head>

    <body>

       <form>

          <input type="button" value="測試1--傳遞1個參數"

            onClick="JavaScript: needTwoPara('smallerpig');">

       </form>

       <form>

          <input type="button" value="測試2--傳遞2個參數"

            onClick="JavaScript: needTwoPara('smallerpig','小小豬');">

       </form>

       <form>

          <input type="button" value="測試3--傳遞3個參數"

            onClick="JavaScript: needTwoPara('smallerpig','小小豬','生命不息');">

       </form>

       <form>

          <input type="button" value="測試4--傳遞4個參數"

            onClick="JavaScript: needTwoPara('smallerpig','小小豬','生命不息','學習不止');">

       </form>

    

    </body>

</html>

  

點擊第一個按鈕的返回結果:

1

2

3

4

5

6

7

我是個需要2個參數的函數

您輸入的參數的個數爲:1

1個參數爲:smallerpig

以上是用arguments來獲得參數

下面用變量來獲得參數:

p1:smallerpig

p2:undefined

點擊第二個按鈕的返回結果:

1

2

3

4

5

6

7

8

我是個需要2個參數的函數

您輸入的參數的個數爲:2

1個參數爲:smallerpig

2個參數爲:小小豬

以上是用arguments來獲得參數

下面用變量來獲得參數:

p1:smallerpig

p2:小小豬

點擊第三個按鈕的返回結果:

1

2

3

4

5

6

7

8

9

我是個需要2個參數的函數

您輸入的參數的個數爲:3

1個參數爲:smallerpig

2個參數爲:小小豬

3個參數爲:生命不息

以上是用arguments來獲得參數

下面用變量來獲得參數:

p1:smallerpig

p2:小小豬

點擊第四個按鈕的返回結果:

1

2

3

4

5

6

7

8

9

10

我是個需要2個參數的函數

您輸入的參數的個數爲:4

1個參數爲:smallerpig

2個參數爲:小小豬

3個參數爲:生命不息

4個參數爲:學習不止

以上是用arguments來獲得參數

下面用變量來獲得參數:

p1:smallerpig

p2:小小豬

理解原因:

ECMAScript函數的參數與大多數其他語言中的函數的參數有所不同。ECMAScript函數不介意傳遞進來多少個參數,也不在乎穿進來參數是什麼數據類型。也就是是說,即便你定義的函數值接受兩個參數,在調用這個函數時也未必一定要是兩個參數。可以傳遞一個、三個甚至不傳遞參數,而解析器永遠不會有什麼怨言。之所以會這樣,原因是ECMAScript中的參數在內部是用一個數組來運行的。函數接受到的永遠是這個數組,而不關心數組中包含哪些參數(如果有參數的話)。如果這個數組中不包含任何元素,無所謂;如果包含多個元素,也沒問題。實際上,在函數體內可以通過arguments對象來訪問這個參數數組,從而獲取傳遞給含糊的每一個參數。

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