Welcome to the community!
As specified in the technical details, the Basic ESC is driven by a pulse-width of 1100-1900us (full-reverse to full-ahead), and has a maximum update rate of 400Hz. The PWM frequency you run at is the ‘update rate’, and the pulse-width is the duration of time that the signal line is set HIGH (3.3-5V) within each period (with the rest of the time set LOW, 0V).
A 50Hz frequency gives a 20ms (20,000us) period within which to do your 1100-1900us pulse to set the speed, which means duty cycles (ratio of HIGH-time to LOW-time) of 5.5-9.5%. Similarly 400Hz → 2.5ms period → valid duty cycles of 44-76%. A 24kHz frequency has a period of ~42us, which is far shorter than the shortest valid HIGH-time of 1100us, so the ESC isn’t able to determine in any meaningful way what speed it’s supposed to be going at.
Hope this helps you understand. Conveniently all the PWM-driven bluerobotics components (lights, gripper, etc) run off the same pulse times of 1100-1900us, so if you can understand one then you can use them all