function f() {
        function g() {
            
        }
    }
        The adjective lexical is used synonymously with static, because both pertain to the lexicon (the words, the source) of the program.
        function g() {
    }
    function f() {
        g();
    }
    var x = ...;establishes a binding for the variable x that maps the variable name to a value. In the following, the terms “variable” and “binding” are often used interchangeably. This is less precise, but makes explanations shorter. Bindings are characterized by:
Scope: The direct scope of a variable is the syntactic construct “in which” a binding has been created. What constructs form scopes depends on the programming language: any kind of block in most languages, only functions in JavaScript. One has two options when it comes to determining where else a variable is accessible, in addition to the direct scope:
    function f() {
        var x;
        function g(y) {
            return x + y;
        }
    }
        function g() {
        var x = myvar + 1; // (*)
    }
    function f() {
        var myvar = 123;
        g();
    }
        function f() {
        var x = "foo";
        function g() {
            var x = "bar";
            function h() {
            }
        }
    }
        function f(x) {
        function g() {
            return x;
        }
        return g;
    }
    var myfunc = f("hello");
    console.log(myfunc()); // output: hello