In functional and semi-functional languages including Scheme, Javascript, Haskell, ML, functions are First Class Citizens , meaning that, like any other value, they can be passed as arguments to other functions. By definition, they do not exist in languages such as C, Perl, and Algol, where functions inhabit a different namespace than variables. As with many things, Tcl is rather unique in this area. commands themselves can not be used as arguments in other commands, but their names can, which provides something very similar to first-class functions. Additionally, apply can be used to interpret a value as a function and evaluate it, providing the equivalent of lambda functions.
As a "first-class citizen", a function can be
like any other value. In other languages, functions are usually opaque objects, so introspection is not available. In Tcl, they are simply strings
First-class functions permit coding styles that are not available in languages without them (C is a good example):