I don't know how JSC handles it, but in SM `eval` has significant negative effects on surrounding code. (We also decline to optimize functions containing `with` statements, but that's less because it's impossible and more because nobody uses them.)
It’s true that there are some necessary pessimizations but nothing as severe as failing to optimize the code at all