Java和JavaScript(函式)引數傳遞是按值傳遞還是按引用傳遞?
阿新 • • 發佈:2022-04-09
結論: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;} 1415 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 }