function assert(b) { if (!b) throw new Error("Bad assertion"); } for (var i = 0; i < 1000; i++) { ;(function foo() { foo = 20; assert(foo !== 20); assert(typeof foo === "function"); })(); ;(function foo() { var bar = function() { return foo; } foo = 20; assert(foo !== 20); assert(bar() !== 20); assert(typeof foo === "function"); assert(typeof bar() === "function"); })(); ;(function foo() { eval("foo = 20;"); assert(foo !== 20); assert(typeof foo === "function"); })(); ;(function foo() { eval("var foo = 20;"); assert(foo === 20); })(); ;(function foo() { "use strict"; assert(foo !== 20); assert(typeof foo === "function"); })(); }