When called in a bound context, the parameters of a bound function are passed by reference and the return value is by reference as well. In all other cases, non-bound functions and bound functions called form non-bound contexts, parameters are passed by value and the the return value is by value.