>JITing strictly typed code is a vastly different problem than JITing dynamic code.
My limited understanding is that it's only vastly different because it's easier. One thing javascript JITs do is try to infer the datatypes likely to be used, and compile a version of the code with those assumptions baked in. In other words, when you've seen the 100th iteration of a loop, you can guess that the next 1000 iterations will involve the same types and optimize for them.