Well what is happening is that closure borrows x and x has a lifetime which lives beyond the thread::spawn and gets drops at the end of the main function so internally the closure will borrow both the lifetime of x and x itself basically the closure's lifetime will also be the same as x so yes even if the thread spawned gets dropped the closure does not because it gets dropped at the same way as x gets dropped which is at the end of the main function.
Now when you write move closure it will basically move the x completely inside the thread like it will take ownership of it now what that means is that the lifetime of x will be the same as that of the closure like in other words the closure's lifetime will not get updated to that of x so when the thread ends so the closure and x both get dropped.
I hope you got the whole idea 🙂