var aObj allows you to pass any type as a variable parameter. Otherwise the compiler will complain about the wrong types. This is the same technique used by the FreeAndNil routine. If the param for this routine was a TObject type for example it would complain saying the types much match for a var param when you tried to FreeAndNil any type of class other than TObject.

When you pass a var param you are able to make changes to inside the routine which is what we will be doing. So to prevent bad things from happening the compiler make sure the types match. By specifying an unknown type, you are saying, bypass strict type checking and I will be responsible for the object types myself.