{content 'name'} ... {/content} stores its content under that name and prints nothing. The content is kept as template source, unrendered: fields and tags in it are resolved each time it is used, with the values of that moment and of that place. Written once, it can be rendered many times - {name} or {content:name} - or handed to another tag as its body with content='name', so one row template serves several loops.

With the name on the closing tag instead - {content} ... {/content 'name'} - the content is rendered first, where it stands, and the finished text is kept: a snapshot that no longer changes with the variables.

Without content, a second parameter gives the text: {content 'hi', 'Hello'}. A field there - {content 'c', $text} - is a value, and like every value it stays text when the content is rendered: braces in it never run as tags.

Stored content is also what the else=, null= and notOk= options of every tag put in place of a level that came up empty - see {false} and {null}. Under the strict syntax check a {content} without a name, or with the name of a built-in or application tag, is an error.