A just-in-time compiler is an attachment to an interpreter. After the interpreter has run a section of code, such as a function definition, enough times, the interpreter can compile just that function to machine language on the fly, and from then on use the compiled code for that function. That can speed up an interpreter substantially, since there are usually only a few crucial functions that need to be compiled.