There are so many different variables when making that call. You have to evaluate all those variables from what you want out of life.
Personally I do not want to be tied into a contract. Just my trigger. I had a 4, so surfed the web until I was able to get a 4S for the $ I wanted to pay. The 5 is just too much money for me to pay and not be on a contract. Again, these are my variables which influence my decisions. Works for me, might not work for anyone else.