I'm learning about "bind", and I found there is another way of using the wrap function, without using "bind". I can code like below.
let user = {
  firstName: "John",
  sayHi() {
    alert(`Hello, ${this.firstName}!`);
  }
};
//using wrap function instead of bind 
setTimeout(function() {
  user.sayHi(); // Hello, John!
}, 1000);
If you use  setTimeout(user.sayHi, 1000);  instead of wrap function, it doen't work. I know why.
But I can't understand,  why does it work when you use wrap function?
