Call by value is a way to pass
arguments to
subroutines in which the value itself is copied. As a consequence, any modification to the value within the subroutine will not be preserved after the subroutine terminates; this is cleaner
in the sense that it leads to a slightly more
declarative style of programming.
Call by reference, however, is less work if values can be large. Call by value return is just fun. And call by name is amazing.