Also, even if a company can't hire me at the moment due to real budget constraints, they might be able to do so in the future, or perhaps one of the people I interviewed and impressed enough to get to the salary negotiation phase will remember me when they move to another company and want to hire me then.
If I name a number way out of their range first, though, they could reject me right off the bat, and I'd never get an interview in the first place, never get the practice, and never get a chance to impress anyone. All of these are worth more to me than the chance of a salary negotiation going sour because I wind up being too expensive. Besides, I'll always have the chance to decide whether I want to work for the company despite them being below my ideal salary. Salary isn't everything.
As for anchoring, that might work if you're negotiating with novices, but many employers have professional salary negotiators (either HR or recruiters themselves) who know about anchoring, and they're not going to get fooled by such psychological tricks. If I don't reveal a number first, however, they are forced to name one, and then the ball is in my court, and I can negotiate up from there as I see fit. There's really no downside.