javascript
【实例讲解】JS中形参、实参可以不一致
function myFunction() { var x=5; return x; } 補充:JS中帶返回值的函數,在函數定義時不體現
//正文
1.實參與形參個數可以有偏差,不會因為參數不統一而錯誤。
例1:
?| 1 2 3 4 5 6 | functionbox(a,b){??????????????????????? ????return a + b; ?} ?alert(box(1,3,5));??????? //運行結果:“4”。 ???????????????????????????//進行的運算為“1+3”,沒有用到“5”。 |
例2:
?| 1 2 3 4 5 | functionbox(a,b,c){ ????return a + b+c; ?} ?alert(box(1,'5'));???????? //運行結果:15undefined。 ????????????????????????????//結果為sring類型。進行的運算1與‘5’的字符連接,再與一個不存在(undefined)的字符連接,結果即為15undefined。 |
2.JS函數不能重載。
因為“函數重載”靠的就是相同函數名根據參數的不同,匹配特定函數,從而執行函數的過程;而JS函數不再排斥“異形”函數,缺失了辨別相同函數名的不同函數的過程,相同函數名的情況下,JS調用時,只會執行最后一個所調函數。
例3:
?| 1 2 3 4 5 6 7 8 9 10 | 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:
?| 1 2 3 4 5 6 7 8 9 10 | 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:
?| 1 2 3 4 5 6 7 | function box(){ ????return arguments[0]+arguments[5]; } alert(box(1,2,3,4,5,6));?????????????????????? //執行結果為:7 alert(box('Test','UseCase',3,4,5,6));????????? //執行結果為:Test6 ???????????????????????????????????????????????//arguments[0]表示第一個參數,arguments[5]表示第六個參數;上面兩個執行結果,都反映了,box()函數只用了所需的指定參數,其他參數都被忽略了。 |
3.2 arguments.length得到參數的個數
例6:
?| 1 2 3 4 5 6 7 | function box(){ ????return arguments.length; } alert(box(1,2,3,4,5,6));????????????????????? //執行結果為:6 alert(box('Test','UseCase',3,4,5,6));???????? //執行結果為:6 ??????????????????????????????????????????????//當需要知道某序列有多少元素時,將其傳入該函數,即可知道 |
3.3 arguments.length的擴展運用
例7:
?| 1 2 3 | function box(){ ????var sum = 0; ????for (var i=0;i</arguments.length;i++){> |
4.一個顯而易見的錯誤(只為下面說明問題)
看了例7,可能會有點迷糊,因而添加例8、例9,都說明了一個問題,參數為函數體提供必要信息,用于可控地實現功能。函數(function:功能)
例8:
?| 1 2 3 4 5 6 7 | 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:
?| 1 2 3 4 5 6 | 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函數對多出的實參去粗取精,對少的實參做了適當的處理,沒有雷厲加之,使得函數運行更大限度地平穩協調。
總結
以上是生活随笔為你收集整理的【实例讲解】JS中形参、实参可以不一致的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【结合实例】信息增益的计算
- 下一篇: 【通俗讲解】BP神经网络