What are Pure Functions and Side Effects in JavaScript?