WPA/WAP2 does not use a dedicated random salt. Instead, it was designed to use the SSID as a salt value. This is better than no salt but it does mean some access points are vulnerable. For quite a while most routers would ship with a static SSID ('linksys' or 'default'). So while hackers can't just precompute a single set of passphrases they could precompute common passwords against common SSIDs. Church of Wifi has some rainbow tables (1 million common passphrases for 1,000 common SSID = 33GB) as well as general information on wifi cracking.
http://www.renderlab.net/projects/WPA-tables/
So WPA/WPA2 isn't as bad as WEP but relying on a low entropy value like SSID made it more vulnerable than it needed to be. That vulnerability was made worse by companies shipping hundreds of millions of routers for years with static SSIDs. Many people never changed them, and some who did picked other equally bad/common SSIDs.
The most common SSIDs
linksys
<no ssid>
default
NETGEAR
Wireless
WLAN
Belkin54g
MSHOME
home
hpsetup
smc
tsunami
ACTIONTEC
orange
USR8054
101
tmobile
<hidden ssid>
SpeedStream
linksys-g
3Com
WaveLAN Network
Wayport_Access
hhonors
pi07490509x
pi07490509x09
Motorola
SST-PR-1
ANY
eurospot
188ALT
Gateway
HomeNet
GoldenTree
SITECOM
ConnectionPoint
<No current ssid>
Philips WiFi
Customer ID
PCX5000
arescom
Wireless Network
Today most routers use a pseudo-random SSID like linksys_AUENFJS22
instead of just linksys
but there are a lot of vulnerable hotspots out there.
The hashing function is PBKDF2 which uses multiple rounds to slow down attacks. The entire authentication process is far too complex to be a good fit for SO.
To protect yourself from precomputation you should ensure you use a unique SSID. One thing I have seen more than once is someone thinking they are secure by disabling the SSID except that is common enough that it became an entry in most rainbow tables.