Let me go on record that I am categorically opposed to doing free work. If you're a pro, aspiring pro, up and coming, whatever, and someone asks you to take pictures for them (especially if its a commercial client), you should be compensated in some way. I prefer cash.
There are times though that its ok to take other forms of payment, barter is one way. I think its fine to take product in exchange for photography services, it all depends on what it is; some new clothes would be good, but 50 pounds of soap not so much. Travel is another way; a friend of mine was asked to shoot a wedding, the bride was a co-worker, and while she couldn't afford much, she did fly him down to Mexico for three days and pay for a hotel room for him. How about some airline miles?
A little further down the food chain is shoot in exchange for experience. Now you're entering a gray area. Everyone needs to build their portfolio, and having work from legit clients certainly helps beef up your client list, but you really need to make sure the client isn't taking advantage of you. Promising you more work later on does NOT count. Most of the time clients like that will never call you back because they'll be making the same promise to a different photographer next time they need photos. They don't care about quality, they just don't want to pay. Pay attention, because this is a near universal tenet: you don't value what you don't pay for.
The last point I'd like to make is that no matter how much you've agreed to do the job for, you still need to give it 100%. If you're not committed to doing your best (because you're not getting much money), you're doing yourself a disservice, and here's why. You're only as good as your portfolio, and if you do sub-par work and show it, it will only get you more sub-par work.