How JavaScript Works: deep dive into call, apply and bind