Consider these two programs: "(function foo() { foo = 20; print(foo); })();" and "(function foo() { let x = function() { return foo; }; foo = 20; print(foo) })();" They have different behaviors. The latter incorrectly assigns 20 to foo. I think we can probably make this Just Work with a FunctionNameScope.
Created attachment 259805 [details] patch
landed in: http://trac.webkit.org/changeset/188926