1. 程式人生 > 其它 >Java和JavaScript(函式)引數傳遞是按值傳遞還是按引用傳遞?

Java和JavaScript(函式)引數傳遞是按值傳遞還是按引用傳遞?

結論:Java和JavaScript的所有(函式)引數傳遞都是按值傳遞!

1.什麼是函式引數的傳遞是按引用傳遞?

什麼是引用?這個概念多見於C++中,在C++中,引用解釋為變數的別名。   

 1 #include <cstdio>
 2 
 3 class Item
 4 {
 5 private:
 6     int id;
 7 public:
 8     Item(int _id);
 9     void Display();
10     ~Item();
11 };
12 
13 Item::Item(int _id){this->id = _id;}
14
15 void Item::Display(){printf("Id:%d\n",this->id);} 16 17 Item::~Item(){} 18 19 20 void fun(Item& _item){//函式引數是引用。 21 Item local(200); 22 _item = local;//改變引用_item的指向物件,可以影響外部變數的指向,外部變數也將指向新物件。 23 } 24 25 int main(int argc, char const *argv[]) 26 { 27 Item item(100); 28 item.Display(); //
Id:100 29 fun(item);//按引用傳遞的函式引數,函式內部改變了引用_item的指向物件,所以這裡的item指向物件也變了。 30 item.Display();//Id:200 31 return 0; 32 }

2.Java按值傳遞

 1 class Item{
 2 
 3     private int id;
 4 
 5     public Item(int id){
 6         this.id = id;
 7     }
 8 
 9     public void Display(){
10         System.out.println("Id:" + this
.id); 11 } 12 13 } 14 15 16 public class Main { 17 18 public static void fun(Item _item){ 19 Item local = new Item(200); 20 _item = local;//函式內部改變了引數的指向,如果這裡是引用,則外部的變數也將改變指向新物件。 21 } 22 23 public static void main(String[] args) { 24 Item item = new Item(100); 25 item.Display(); //Id:100 26 fun(item); 27 item.Display(); //Id:100 28 } 29 30 }

3.JavaScript按值傳遞

function fun(_item) { 
    local = new Object;
    local.id = 200;
    _item = local;//函式內部改變了引數的指向,如果這裡是引用,則外部的變數也將改變指向新物件。
} 

let item = new Object(); 
item.id = 100;
console.log(item); //{ id: 100 }
fun(item); 
console.log(item);//{ id: 100 }