The majority of operations need to have an object to act on. By default the command would act on the object the script is attached to (This is a bit more complicated with global scripts, so I am ignoring them for now).
So if you have a script running on an NPC with the id "NPC1" then the script
startcombat, "NPC2"
would cause "NPC1" to start combat with NPC2. You could also use
"NPC1"->startcombat, "NPC2"
which would do exactly the same thing as in both cases startscript is called on the NPC1.
If you have a script attached to another object, lets say a chest, and wanted to get "NPC1 to start combat with NPC2 then this wouldn't work:
startcombat, "NPC2"
as the script is attached to the chest, so this tries to get the chest to start combat with NPC2. Insead you would have to directly reference the entity you want the startscript to be called on. Hence you would have to use
"NPC1"->startcombat, "NPC2"
.
In essence, commands that use objects will by default be called on the entity the script is attached to. Using: "actorid"-> before the command allows you to specify an alternative entity to call the function on.
I hope now that you understand that your example is slighty wrong and they are not infact equilivent. This
player->startcombat
won't compile, as startcombat takes a single argument indicating what should be attacked.
This however would cause the entity that the script is attached to to attack the player
startcombat player