Passing by value is only useful to let an invoke statement pass information into a subroutine. However, a parameter that is passed by value cannot pass information from a subroutine.
A parameter that is passed by reference provides a mechanism to let a subroutine modify a variable or parameter that is already allocated. This is accomplished by making a parameter a “reference” to another variable or parameter.