private static class ExpressionState.VariableScope
A new scope is entered when a function is called and it is used to hold the parameters to the function call. If the names
of the parameters clash with those in a higher level scope, those in the higher level scope will not be accessible whilst
the function is executing. When the function returns the scope is exited.