Looking at things from the grbl perspective, the term “limit switch” only applies for the X-carve if you use hard limits ($21=1) .
Looking at things from the grbl perspective, all other cases for the X-carve the switches are “homing switches”.
Homing switches allow soft limits ($20=1) to work. For this case the “limits” depend on having done the homing cycle and on the low end the limits are 0,0,0 and the limits on the high end are set by $130, $131, and $132. After the homing sequence the switches are ignored. Cannot get a false trigger after homing sequence is complete.
For soft limits the destination of your G-code commands are checked to see if they are out of bounds - if they are out of bounds, grbl alarms without moving the machine.
For hard limits the error is only detected if the machine actually does a move that trips a “limit switch”.
You can have both soft limits and hard limits turned on at the same time. This configuration is susceptible to false triggers without either, shielded switch wiring or a low pass filter on the switch input to the gShield.
Both soft limits and hard limits with the Arduino/gShield electronics depend on the integrity of the electronics. In other words if your electronics don’t function properly then neither will your soft or hard limits.