Because $0 inside a function is not the same as outside the function. Outside it is the name of the script, as you noticed and inside the function it is the function's positional parameters.
Besides that I can't see where you call this function at all so you might want to write something like:
#!/bin/bash
usage()
{
scriptname=$1
# $1 is the 1st parameter handed over by calling the function (down there the $0 in this case), which is the name of the script
echo "$scriptname -cs <number of batches>\n"
exit 1
}
usage $0
exit 0