JavaScript Engines: How Do They Even?