A bad block (or sector) is essentially a block that returns an error rather than the data up on reading it.
Soft errors
Sometimes the issue is merely a mismatch between the data in the block and the ECC value and once we rewrite the block it's okay again and can be used to store new data. This is some times called a soft error.
Hard errors
More serious issues can also occur, in which case the block can not be used any longer. In such a case the hard drive can hide the defect using a method called reallocation.
Reallocation
Say we discover LBA block 100 is bad. Reallocation then means the drive un-maps LBA 100 from the bad block and reassigns LBA 100 to a spare block.
This mutation is recorded in the system area of the hard drive in a module that referred to as the grown defects list or G-List.
The G-List is related to the P-List, which is storing bad sectors that were discovered during manufacturing.
Due to different methods bad sectors in the P-List do not affect the drive speed, G-List entries do (ever so slightly, but still).