Let's consider a modern implementation of Common Lisp. It has an interpreter and a native code compiler. (To be fair, many have only compilers, and a few only have (bytecode) interpreters, but in all cases interpreter-like and compiler-like interfaces are exposed). The native code compiler can be run ahead of time, or when the program loads. Common Lisp supports all three models of compilation. Usually, you use whichever is most appropriate for the task at hand. When you're debugging, you interpret the code, because it gives better diagnostics. When you deploy, you compile the code, to get good performance. Theoretically, if you could run, e.g., a "Lisp applet" in your browser, you might use JIT compilation. Incidentially, this compilation-model-agnostic nature doesn't have to be exclusive to Lisp implementations. All three models can be applied to any programming language, and a programming language implementation could theoretically support all of them. The advantage to doing so would be that you would get the advantages of all of them: easier debugging with interpreted code, greater speed with compiled code, and greater portability with JIT-compiled code.
Let's consider a modern implementation of Common Lisp. It has an interpreter and a native code compiler. (To be fair, many have only compilers, and a few only have (bytecode) interpreters, but in all cases interpreter-like and compiler-like interfaces are exposed). The native code compiler can be run ahead of time, or when the program loads. Common Lisp supports all three models of compilation. Usually, you use whichever is most appropriate for the task at hand. When you're debugging, you interpret the code, because it gives better diagnostics. When you deploy, you compile the code, to get good performance. Theoretically, if you could run, e.g., a "Lisp applet" in your browser, you might use JIT compilation. Incidentially, this compilation-model-agnostic nature doesn't have to be exclusive to Lisp implementations. All three models can be applied to any programming language, and a programming language implementation could theoretically support all of them. The advantage to doing so would be that you would get the advantages of all of them: easier debugging with interpreted code, greater speed with compiled code, and greater portability with JIT-compiled code.