Bash

Scoping

Dynamic scoping in action

Dynamic scoping means that variable lookups occur in the scope where a function is called, not where it is defined.

$ x=3
$ func1 () { echo "in func1: $x"; }
$ func2 () { local x=9; func1; }
$ func2
in func1: 9
$ func1
in func1: 3

In a lexically scoped language, func1 would always look in the global scope for the value of x, because func1 is defined in the local scope.

In a dynamically scoped language, func1 looks in the scope where it is called. When it is called from within func2, it first looks in the body of func2 for a value of x. If it weren’t defined there, it would look in the global scope, where func2 was called from.


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow