Function is a block, so it may introduce assignments (scoped to the function body). Additionally, it has an argument list, which will be assigned values when the function is invoked.
The XmlType property defines the expected return type of this function. Normally, this should be the same as its definition's types, so setting the function definition changes the function's types. In some rare cases, a compiler may wish to override the types after setting the function's definition (for example, an XQuery might define a function's return type to be wider than its definition would imply.)