JavaScript函數遇實參與形參——智能而有原則

來源:互聯網
上載者:User

JavaScript函數遇實參與形參——智能而有原則

1.實參與形參個數可以有偏差,不會因為參數不統一而錯誤。

例1:

functionbox(a,b){                            return a + b; } alert(box(1,3,5));        //運行結果:“4”。                           //進行的運算為“1+3”,沒有用到“5”。

例2:

functionbox(a,b,c){    return a + b+c; } alert(box(1,'5'));         //運行結果:15undefined。                            //結果為sring類型。進行的運算1與‘5’的字元串連,再與一個不存在(undefined)的字元串連,結果即為15undefined。

2.JS函數不能重載。

因為“函數重載”靠的就是相同函數名根據參數的不同,匹配特定函數,從而執行函數的過程;而JS函數不再排斥“異形”函數,缺失了辨別相同函數名的不同函數的過程,相同函數名的情況下,JS調用時,只會執行最後一個所調函數。

例3:

function box(a,b,c){    alert('執行了第一個函數,' + a +'+' + c + '='+(a+c)); } function box(a,b,c){    alert('執行了第二個函數,'+ a + '+' + b + '='+(a+b)); }                alert(box(1,'5',3));    //執行結果為:執行了第二個函數,1+5=15                        //類型為string.                

例4:

function box(a,b,c){    alert('執行了第二個函數,'+ a + '+' + b + '='+(a+b)); } function box(a,b,c){    alert('執行了第一個函數,' + a +'+' + c + '='+ (a+c)); }               alert(box(1,'5',3));    //執行結果為:執行了第一個函數,1+3=4                        //類型為number. 

3.函數運用arguments對象,很有特點

arguments對象的使用,很好地解釋了支援形參、實參不一致而不出錯的原理性問題。

3.1 arguments[index]指定參數值,index為參數的索引

例5:

function box(){    return arguments[0]+arguments[5];}alert(box(1,2,3,4,5,6));                       //執行結果為:7alert(box('Test','UseCase',3,4,5,6));          //執行結果為:Test6                                               //arguments[0]表示第一個參數,arguments[5]表示第六個參數;上面兩個執行結果,都反映了,box()函數只用了所需的指定參數,其他參數都被忽略了。

3.2 arguments.length得到參數的個數

例6:

function box(){    return arguments.length;}alert(box(1,2,3,4,5,6));                      //執行結果為:6alert(box('Test','UseCase',3,4,5,6));         //執行結果為:6                                              //當需要知道某序列有多少元素時,將其傳入該函數,即可知道

3.3 arguments.length的擴充運用

例7:

function box(){    var sum = 0;    for (var i=0;i

4.一個顯而易見的錯誤(只為下面說明問題)

看了例7,可能會有點迷糊,因而添加例8、例9,都說明了一個問題,參數為函數體提供必要資訊,用於可控地實現功能。函數(function:功能)

例8:

function box(a,b){    return a+b+c;}alert(box(1,2,3));                                       //ReferenceError:c is not defined alert(box(1,2));                                         //ReferenceError:c is not defined                                                          //字面量c未定義

例9:

function box(){    return a+b+c;}                           alert(box(1,2,3));                                       //ReferenceError:a is not defined                                                         //字面量a未定義

簡單比較例2、例4、例8,可以得出這樣的結論,JS中的函數體與形參、實參以及形參與實參的關係是:

遵循一個原則:函數實現功能

函數體與形參關係:形參必須滿足函數體的必要需求,否則沒法進行,即使用了形參未定義的‘字面量’,出錯:c is not defined 。

形參與實參關係:實參在形參的尺規下,多出的被攔截而被忽略,缺少的被判斷為undefined(不存在),但都不報錯。

智能:是說JS函數對多出的實參去粗取精,對少的實參做了適當的處理,沒有雷厲加之,使得函數運行更大限度地平穩協調。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.