A Functional Specification is a list of demands and constraints intended to describe a product to be designed and built.
Functional specs are rarely complete, having been prepared by adding more and more detail in response to discovered factors, until the writers are exhausted or the planned time has run out. They also leave most of the behavior of the product up to the developers' interpretation of the spec. This is why a product can meet every line item of a functional specification and still fail to be useful to the client.
PeterWegner and others have shown that for interactive systems, a complete and correct specification is not possible.
Fortunately, other tools for describing software products have been developed to the point that functional specs are no longer of any use.