Can you throw together a quick example .cap? For Each triggers all the conditions below it, and actions and subevents, once per instance. It's a bit like saying "For i = 1 to Object.Count" and for each iteration, it picks a specific instance. Essentially, it is used to force system actions and conditions to work on a per-instance basis.
For example:
+ On any key pressed
+ Sprite X < 320
Create object 'ring' and position by Sprite
In this case, when the event triggers, if a Sprite is left of X=320, only one 'ring' is created. The action is a system action, so simply executes one time. The ring is positioned by the first picked Sprite.
Using For Each:
+ On any key pressed
+ Sprite X < 320
+ For Each Sprite
Create object 'ring' and position by Sprite
This forces the actions to be run once per instance, so a 'ring' object is created for every 'sprite' left of 320.
Another use:
+ Compare values: distance(A.x, A.y, B.x, B.y) less than 100
Destroy A
In this case, because Compare Values is a system expression, it simply runs once, retrieving the values for the first A and B instances, calculating a single distance, and making a single comparison. This isn't useful if you have multiple A and B objects - unless you force the condition to check once for every combination of A and B:
+ For each A
+ For each B
+ Compare values: distance(A.x, A.y, B.x, B.y) less than 100
Destroy A
This destroys any A if it comes within 100 pixels of any B object, instead of only applying to the first instances.