Suppose you take a fixed-bid contract that you expect to take a month. You do your month of work and deliver it to the client. Now the client asks for changes X, Y, and Z, and says they aren't paying you until it's done. Now your options are (1) Argue about whether that was covered by the original specification, which does no good even if you're right because they're refusing to pay. (2) Follow the sunk cost fallacy and do extra work for free, hoping to get paid for the work you already did. (3) Walk away, and don't get paid for the work you already did. Also, if there was a deposit, now the client may try to sue you! (4) Sue to collect, but they know that you, as a small freelancer, don't have the resources to lawyer up and sue. Even if you hire a lawyer to write a tight freelance contract, they may refuse to sign it or attempt to negotiate it, and the lawyer fees are more than your revenue.
For example, at my last job, my employer hired a freelancer (not me) to do a WordPress site. Even though the site was done, he refused to pay, because "his business was having cashflow problems". I pointed out "Hey! The guy did the work! Why aren't you paying him? It's not his fault that you're having financial problems!" He did, several months later, pay. Then, the guy put a logic bomb in the site that I had to remove. (Owner: "WAAH! My site was hacked! Fix it! I'll pay you extra if you fix it now!" [I was not there that day.] I fixed it, no bonus was paid.)