For an egregious post, by all means, close now. Even if the post is merely bad but potentially redeemable with serious effort, don't hesitate to close. Leave a comment to indicate why the post is inappropriate and how it can be improved (if you think it can). If the user is new, remind them that the post can be reopened if it is improved. After an edit, the asker can flag to ask for reopening, or reply to a comment if there was one left by a moderator. (Users can @reply to a moderator who closed a question, but this feature isn't well-known, so don't expect users to use it.) Generally speaking, the decision to close or open should be based on the current state of the post, and not on a hypothetical future change.
In borderline cases, you may want to leave a comment but hold off on the closing. This is preferable when you know you particularly want this user to feel welcome and stick around (for example because you know them socially).
As the site progresses, direct closure should become the more common case.
Except for really egregious cases like spam, once a question is closed, it should remain on the site for a few days, to give the asker or other community members a chance to improve or vote to reopen. If it's clear that a question is unwelcome and is never going to be reopened, then the question should be deleted (this does not apply to duplicates, which are useful as search fodder). Leaving unwelcome questions around gives a bad impression to visitors, particularly those who are new to Stack Exchange and won't catch the nuance that a question is closed hence unwelcome.
The guidelines I describe here are standard on Stack Exchange, except possibly for Math which tends to do things differently.