富国沪深
在非严格模式下, 你的代码等价于var ff = function() {...}(function() { var f if (false) { f = function() {...} } f()} ())自执行函数中, f的定义被提前, 离开了if代码块, 但赋值仍在if中, 所以到执行时f是undefined在严格模式下, 你的代码等价于let ff = function() {...}(function() { if (false) { let f f = function() {...} } f()} ())内部f的定义也是在if中的, 所以f用的是外面的f