Dynamic variable scoping is when you scope a variable in a programming language by replacing the existing variable of that name with a new variable temporarily, for instance for the duration of a function call. This is an easy way to implement private variables. However the problem is that if one function calls another, the other may accidentally modify the first function's variables when it intended to modify a global variable instead. Therefore over time it is becoming more common for programming languages to implement private variables with lexical variable scoping instead.
gimmex will return 10 in dynamic scoping, and 5 in lexical scoping.
In dynamic scoping, gimmex would return 10, because when gimmex was called, x was defined to be 10. gimmex opens the procedure (lambda () x) to where the current environment is. In other words, variables that occur free in a procedure or subroutine would be looked up in the scope where the procedure was called.
The concept of dynamic verses static scoping is concerned which set of rules to apply when finding a binding to a variable and/or changing a value bound to a variable.
Dynamicscoping rules depend on the calling sequence of the (sub)programs and requires searching the executing subprogram’s dynamic parent, i.e., the calling environment first.
If dynamicscoping rules were to continue to be followed, this is would be the correct environment to search next.