Stack Exchange network consists of 183 Q&A communities including Stack Overflow, the largest, most trusted online community for developers to learn, share their knowledge, and build their careers.
declaring a variable without giving it a value isn't a particularly good idea either. There are patterns where it could come up, such as using a set variable as the exit condition on a search loop, but it's far from universal - maybe you typically use small functions instead of simple blocks or declare all the variables at function level.
That would depend on your pre-JavaScript background - if you are used to a language that enforces block level scope you won't think of using variables outside their block and therefore never run into any issues.
In that case you have bigger problems - with no compiler errors available, keeping code easily readable is particularly important. Not sure how you could ask about it as a simple phone question, but it would work quite well as a "what's wrong with this code" question.
No, you keep the full history, but a merge is actually a new commit with multiple parents, so you can see which commits are merges into master. A simple convention on commit messages to determine what sort of log they go into may also help.