ECMAScript 中全部函數的參數都是按值傳遞的,言下之意就是說,參數不會按引用傳
遞,雖然變量有基本類型和引用類型之分。ide
- function box(num) { //按值傳遞,傳遞的參數是基本類型
- num += 10; //這裏的num 是局部變量,全局無效
- return num;
- }
- var num = 50;
- var result = box(num);
- alert(result); //60
- alert(num); //50
PS:以上的代碼中,傳遞的參數是一個基本類型的值。而函數裏的num 是一個局部變
量,和外面的num 沒有任何聯繫。
下面給出一個參數做爲引用類型的例子。函數
PS:若是存在按引用傳遞的話,那麼函數裏的那個變量將會是全局變量,在外部也可
- function box(obj) { //按值傳遞,傳遞的參數是引用類型
- obj.name = 'Lee';
- }
- var p = new Object();
- box(p);
- alert(p.name);
以訪問。好比PHP 中,必須在參數前面加上&符號表示按引用傳遞。而ECMAScript 沒有這
些,只能是局部變量。能夠在PHP 中瞭解一下。
PS:因此按引用傳遞和傳遞引用類型是兩個不一樣的概念。
- function box(obj) {
- obj.name = 'Lee';
- var obj = new Object(); //函數內部又建立了一個對象
- obj.name = 'Mr.'; //並無替換掉原來的obj
- }
最後得出結論,ECMAScript 函數的參數都將是局部變量,也就是說,沒有按引用傳遞。spa