// 1. Can you predict what will be 'hollered'. // 2. Walk through the execution as you think out loud. function holler(val, name, scope){ console.log("[ "+ scope +" ] variable '" + name + "' has value: " + val) } var a = '2'; var c = 'c'; function foo() { a = '3'; var c = 'd'; holler(a, 'a', 'In foo'); holler(c, 'c', 'In foo'); var x = 1; if (x) { (function () { var x = 2; holler(c,'c', 'In anon function'); }()); holler(x,'x','In if block'); } holler(x,'x', 'In foo after if block'); function bar() { var x = 3; a = '4'; } holler(x,'x', 'In foo after bar'); holler(a,'a', 'In foo after bar'); bar(); holler(x,'x', 'In foo after bar() invocation'); holler(a,'a', 'In foo after bar() invocation'); } holler(a, 'a', 'after foo'); holler(c, 'c', 'after foo'); foo(); holler(a, 'a', 'after foo() invocation'); holler(c, 'c', 'after foo() invocation');