**理解參數:**
JS函數的參數與大多數其他語言中函數的參數有所不同,JS函數不介意傳遞進來多少個參數,也不在乎傳遞進來的參數是什么數據類型。也就是說,即便你定義的函數只接收兩個參數,在調用這個函數也未必一定要傳遞兩個參數。可以傳遞一個,三個甚至不傳遞參數,而解析器永遠也不會有什么怨言。原因是JavaScript中的參數在內部是用一個數組來表示的。函數接受到始終是這個數組,而不關心數組包含多少元素和參數。實際上在函數體內可以通過arguments對象來訪問這個參數數組,從而獲取傳遞給函數的每一個參數。
其實,arguments對象只是與數組類似(它并不是array的實例),因為可以使用方括號語法訪問它的每一個元素(即第一個元素是arguments[0],第二個下標為1,以此類推),使用length屬性來確定傳遞進來多少個參數。
~~~
function hello(){
alert(arguments[0]+":"+arguments[1]);
}
hello('姓名','張三');
~~~
JS如何實現重載:
在JS里面本身是沒有重載這個概念的,但是JS可以在運行時重寫我們的參數以及改變參數類型,這一點很類型與Java的重載;
~~~
public class Test {
public void outPut(String name){
System.out.println(name);
}
public void outPut(String name,String address){
System.out.println(name+":"+address);
}
public static void main(String[] args) {
Test test=new Test();
test.outPut("張三", "上海");
}
}
~~~
上面這段代碼是Java的重載,它在運行的時候會根據方法的參數類型以及個數去匹配對應的參數;
~~~
function outPut(){
if(arguments.length==1){
alert(arguments[0]);
}else{
alert(arguments[0]+":"+arguments[1]);
}
};
outPut('張三','上海');
~~~
上面這段代碼類似于JS的重載,即判斷一下參數的個數,來得到去對應的參數信息;
另一個與參數有關的重要方面就是arguments對象可以與命名參數一起使用;
~~~
function outPut(name,address){
if(arguments.length==1){
alert(arguments[0]);
}else{
alert(arguments[0]+":"+address);
}
};
outPut('張三','上海');
~~~
關于arguments還有一個比較有意思的事,就是他的值會永遠與命名參數的值保持同步;即我修改了name的值,那么他的arguments[0]的值也會發生改變,這一點跟Java很類似。不過這并不是說兩個值訪問的都是相同的內存空間;他們的的內存是獨立的。但他們的值會同步,這種影響是雙向的,即你修改命名參數的值會改變arguments中對應的值,修改arguments的值也會改變參數的值;
~~~
function outPut(name,address){
name="李四";
arguments[1]="武漢";
if(arguments.length==1){
alert(arguments[0]);
}else{
alert(arguments[0]+":"+address);
}
};
outPut('張三','上海');
~~~
關于參數還要記住最后一點,沒有傳遞值的命名參數將自動被賦予undefined值。這就跟定義了遍歷但還沒有初始化一樣。嚴格模式對如何使用arguments對象做出了一些限制。即像前面哪有賦值講會無效;
- 前言
- javascript基礎與定義
- JavaScript變量
- JavaScript變量二(數據類型,Number,String,Object)
- JavaScript傳參的問題
- JavaScript基本類型和引用類型的值
- JavaScript執行環境及作用域
- JavaScript垃圾收集
- JavaScript和JQuery和angularjs操作select
- 搞對象前,你得先有對象
- JavaScript數組
- JavaScript運行原理解析
- Jquery和angularjs獲取check框選中的值小技巧
- JavaScript函數表達式
- JavaScript的閉包理解
- JavaScript BOM
- JavaScritpt的DOM初探之Node(一)
- 為什么說DOM操作很慢
- jQuery性能優化