傳值與傳參考(Call by value & Call by reference)
了解兩者差異,幫助在開發時減少bug問題
純值為傳值,物件、陣列、函式為傳參考
傳值(by value)
演示圖:
由上圖所示,創造出新的記憶體,值被導向新的位置。
演示程式:
1 | var a = 3; |
由上述程式碼可以說明,由於導向不同記憶體,因此在之後a再度變更值後,a與b的值會不同。
傳參考
演示圖:
由上圖所示,並無新物件被創造,也都導向同一個記憶體。
演示程式:
1 | var a = { say: 'hi'}; |
由上述程式碼可知,由於導向同一個記憶體,因此在變更物件值後,兩者同時更換為新值。
function也是如此:
1 | var a = { say: 'hi'}; |