- Yes (a new object is created each time you run the function, but a reference to that new object is returned by the function). You only ever store references to objects in JS variables.
- It isn't.
- The reference to it inside the function goes away. The reference to it that you returned is still available since you assigned it to a variable. Since there is still an accessible reference to it, it continues to exist.
The MDN documentation on garbage collection is useful related reading.