JavaScript的參數傳遞也都是采用值傳遞的方式進行傳值。
(1) 通過實參調用函數的時候,傳入函數里的是實參的副本而不是實參,因此在函數里面修改參數值並不會對實參造成影響。
例如:將全局變量作為參數傳到函數內部修改之后並不影響變量自己
<script> function test(value) { //修改value的值 value = "局部變量"; alert("函數內部的變量值:"+value);//局部變量 } var value = "全局變量"; test(value); alert("函數外部的值:"+value)//全局變量 </script>
(2)函數的參數個數問題:
使用空參數沒有任何問題,程序可以正常執行,只是JS沒有傳入實參的參數值將作為undefined處理。
JavaScript調用函數時對傳入的實參並沒有要求,即使定義函數時聲明了多個形參,調用函數時也不要求必須傳入相匹配的實參。因此JavaScript不存在函數重載;對JavaScript來說函數名字是唯一的標識類。
例如:如果定義兩個名字相同的函數,不管參數個數,后面的函數會覆蓋前面定義的函數:
<script> function test() { alert("無參函數") } function test(obj) { alert(obj) } test();//undefined // 會調用test(obj)函數,只是參數傳入為undefined </script>
上面的test函數始終調用第二個test(obj)函數。
沒有傳入的參數會被當為null和undefined處理。
例如:
<script> function test(para1) { alert(para1 == null);//true alert(para1 == undefined);//true } test(); </script>
在JavaScript中,將一個變量賦值為undefined或null,老實說,幾乎沒區別。
undefined和null區別參考:http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html