Passing a value by reference means that you pass a pointer to the data value. This means that when you copy the reference to another variable, you then have two variables pointing at the same data.
The data for both is identical. Modifying the data value pointed at by one, changes the value for the other variable also.
Non-primitive values (objects) are passed in this manner.
Passing a value by reference into a function allows the function to make changes that are visible outside the function.