It is good at lock in ("sheesh, I've been here for 8 months, I've only got 4 to go. If I leave I could be leaving $20k on the table"), especially since bonus payouts are often months after hearing the number so you've already began earning the next one before you get your current one paid.
The problem is, when you get that "big" bonus and it's not big then you can't help but be disappointed. I recently saw a company lose about 5 key people at one time because of the disappointment caused by this. Before bonus time those people were happy with their job and even their pay. But they all got nice bonus the year before.
In my estimation, that's 5 people they lost by a non-existent problem they created themselves.