JavaScript中函數的形參和實參的實現原理剖析

來源:互聯網
上載者:User

標籤:

我們都知道JS裡面參數的傳遞是可以不一樣的,比如我們有一個函數:

<script type="text/javascript">    function one(a,b,c) {        this.x = a;        console.log(a);    }    one(1);</script>

我們傳遞的數字只有一個1,但是形參那裡有abc三個。這分明對不上啊不是嗎?

這個時候如果我們查看b,c的話會顯示undefined。ps:比如console.log(b)。

當然啦,本來就沒有這兩個數。怎麼找給你?

那面對這種實參和形參對不上號的情況,JS是怎麼實現的呢?讓我們來看一段代碼:

<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>JavaScript中函數的形參和實參的區別</title></head><body>    <script type="text/javascript">    function one(a,b,c) {        return one.length;    }    function two(a,b,c,d,e,f,g){        return arguments.length;    }    console.log(one()); //3    console.log(two()); //0    </script></body></html>

這裡我們在one函數裡面返回了one.length,在two函數裡面返回arguments.length。可能你已經發現了,輸出的one()返回了one.length就是形參的數量,而argument.length就是實參的數量。

瞬間秒懂了有木有?

甚至我們可以用arguments[0]取到實參的數字。

但是為什麼沒有形參的數字可以用類似數組的方式這樣表示呢?好吧,我知道你是處女座的凡事要求對。除非你形參是數組你可以這樣用。不然在函數裡面我們就只能用形參的名字來取得實際的參數了。

在C#,Java裡面對類型和個數相對JS來說要求十分嚴格,一點對不上就報錯了。而JS就因為有這樣的設計而可以變成相對靈活的語言。

上述方法就是JS依賴的不強制對形參和實參規定個數相等的實現了。至於類型的相同,JS什麼類型都可以寫成var a = ……,要類型何用?所以才說JS是一種弱類型的語言嘛!

JavaScript中函數的形參和實參的實現原理剖析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.