Scope in programming is the space in code where a variable is both defined and visible. Scope differentiates regions of a program and the way the program defines and uses variables. If a variable has one specific definition throughout the entire program, regardless of the function in which it appears, its scope is global. Globally-scoped variables are the same in all of the source code. In contrast, local scope defines a variable for one particular function; it only exists within that function.
The definition of scope is a bit misleading; it also refers to how a variable functions within a program, not just the area in which the variable is definable and visible. The term scope indicates just the area covered, not the action performed; researchers and developers understand the limitations of the term and understand that scope means both the definition and behavior of a variable.
Static vs. dynamic scope
Static (lexical) and dynamic scope are two kinds of scope that occur in programming; static is by far the more common. If a program scopes statically, or lexically, a variable within a function will return its assigned value for that scope whenever that function runs. For example, if a variable x = 5 in a given function, and a subsequent conditional definition for x is also provided, x = 5 wherever the program’s scope defines it as such.
Dynamic scope, however, calls the most recent definition of that variable, regardless of the program’s structure. In the above example, if x = 5 but then x was later defined with a value of 10, a program with a dynamic scope would call x = 10 if that value had been most recently used. Dynamic scope is less structured than static scope; it pulls variable definitions from the call stack instead of the area in which it would be logically defined.