原题
{foo=1function foo(){}foo=2}console.log(foo)// Chrome Firefox Edge 打印 1// Safari 打印 2
debug
console.log(foo){debuggerfoo=1debuggerfunction foo(){}debuggerfoo=2debugger}console.log(foo)
Chrome、Firefox、Edge 下能观察到执行完 function(){} 后全局的 foo 由 undefined -> 1,代码实际转换成如下:
var foo;{function foo() {}foo = 1window.foo = foofoo = 2}console.log(foo)
而这段代码在 Safari 下跑结果不同但是符合直觉,转换成:
function foo(){}{foo=1foo=2}console.log(foo)
