js 函數調用帶參數和不帶參數的區別


如果調用的函數不用參數實現什么功能,可以直接調用func(),不用帶參數;

因為js是一種弱類型的編程語言,對數據類型的要求沒有其他編程語言的要求嚴格,所以在定義函數的時候不需要像java和c#一樣對其傳入參數的類型進行定義。那么傳入參數的個數有沒有影響呢?今天小豬就做了個實驗。

 

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

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

我是個需要2個參數的函數
您輸入的參數的個數為:1
第1個參數為:smallerpig
以上是用arguments來獲得參數
下面用變量來獲得參數:
p1:smallerpig
p2:undefined

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

我是個需要2個參數的函數
您輸入的參數的個數為:2
第1個參數為:smallerpig
第2個參數為:小小豬
以上是用arguments來獲得參數
下面用變量來獲得參數:
p1:smallerpig
p2:小小豬

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

我是個需要2個參數的函數
您輸入的參數的個數為:3
第1個參數為:smallerpig
第2個參數為:小小豬
第3個參數為:生命不息
以上是用arguments來獲得參數
下面用變量來獲得參數:
p1:smallerpig
p2:小小豬

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

我是個需要2個參數的函數
您輸入的參數的個數為:4
第1個參數為:smallerpig
第2個參數為:小小豬
第3個參數為:生命不息
第4個參數為:學習不止
以上是用arguments來獲得參數
下面用變量來獲得參數:
p1:smallerpig
p2:小小豬

理解原因:

js函數的參數與大多數其他語言中的函數的參數有所不同。js函數不介意傳遞進來多少個

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM