Encyclopedia > Lexical variable scoping

  Article Content

Static scoping

Redirected from Lexical variable scoping

In computer science, static scoping, as opposed to dynamic scoping, is a way that the scope of certain variables is determined according to its position in program code. It is also called lexical scoping or lexically scoping.

A variable is said to be lexically scoped if its scope is defined by the text of the program. For instance a variable named balance might be scoped to the inside of the body of one function. That variable is then guaranteed to have nothing to do with any other variable named balance anywhere else in the program, or indeed with the variable named balance in other calls to the same function. This allows programmers to guarantee that their private variables will not accidentally be accessed or altered by functions that they call, and is considered a significant improvement over the older dynamic variable scoping.

Lexical scoping was first introduced in Algol, and has been picked up in other languages since then. In some families of programming languages you will see more modern versions use lexical scoping while older ones use dynamic scoping. For instance in Lisp, Emacs Lisp uses dynamic scoping (1), Common Lisp has both dynamic and lexical scoping, and Scheme uses lexical scoping exclusively. In other cases, languages which already had dynamic scoping have added lexical scoping afterwards. Examples include Perl and Python.

(1) Emacs lisp has supported lexical scoping with lexical-let for a fair while now.

See also: closure (programming), lexical[?], dynamic variable scoping.

All Wikipedia text is available under the terms of the GNU Free Documentation License

  Search Encyclopedia

Search over one million articles, find something about almost anything!
  Featured Article

... trying to make the gyro fall over.) The axis of the gyroscope in the Dynabee is fixed to the spinning mass and it rests in a little groove inside the wrist exerciser ...

This page was created in 34.5 ms