A typical function data type.
Function
is named, takes zero or more arguments and has an optional return value. It
contains a collection of Block
s.
It also maintains a collection of local values which can be typically regarded as variables
existing in the function scope.