(hook (hook-id actual-parameter-list)
A hook is considered as a definition of an open point at the location where it appears in the program. If one or more procedures are attached to the hook a so-called hook-combinator controls the applications of attached procedures on the actual parameter list (see section 5.3). In that case the hook combinator also defines the resulting value of the hook construct. If no procedures are attached to the hook, the default forms are evaluated as if they were embedded in a progn form, and and the value of the progn-form is returned as the value of the hook construct. If no default forms are present, nil is returned.
It should be stressed that a hook is regarded as a definition, which binds the name of a hook to an open point in the program. In other words, hook-id of the hook construct is a defining name occurrence. Besides being a definition, a hook is also a construct which causes the attached procedures to be executed. Compared with the more simple interpretation, where a hook is regarded as one or more procedure calls, this is an important difference.
Given the view that a hook is a definition, it makes sense to talk about its scope (the part of the program, in which the hook has effect). The attachment must take place in the scope of the hook. The scope of a hook may depend on the concrete Lisp dialect. One particular simple solution is to apply indefinite scope  for hooks (hook definitions have effect on the entire program).