Dynamic scoping
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.For example, take this procedure in the Scheme programming language:
(define yoricktestprogram
(lambda ()
(let* ((x 5)
(gimmex (lambda () x )))
(let* ((x 10))
(gimmex)))))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.