Local scopes

These scopes are not necessarily available between components in the same request -- in other words elements or variables in these scopes may be "out of scope" if set in one module and referred to in another.

Scope Description Notes
arguments Holds arguments that are passed to a function or CFC method
attributes Contains attributes that are passed to a custom tag
caller Refers to the scope of the calling page when a custom tag or module is called
this The public scope for a Component/CFC
thread The scope within a thread
variables The private scope for a Component/CFC

Request scopes

These scopes persist through a single request, i.e. any code, in any module, can refer to these scopes during the life of the request:

Scope Description Notes
form Contains arguments that are received from HTML POST operations, i.e. usually form data Lucee has an option to merge form and URL scopes. If this option is enabled, both scopes will contain the same items.
cgi Holds environment variables generated by the web server. CGI variables will vary according to server platform in use and browser.
request Used to store data across an entire request. Data put into the request scope will be accessible from all templates, CFCs, custom tags, etc

Query scopes

By default in cfml, inside a query <cfloop> or <cfoutput>, queries are checked for unscoped variables, even before the variables scope.

In a function / cfc the local scope is checked before the queries scope, the variables scope is always checked afterwards.

This (slow) lookup can be disabled (for better performance) in the Lucee admin or via the Application.cfc setting this.searchResults = false;

Global scopes

These scopes persist between requests, i.e. a value can be set during one request then retrieved in a subsequent one:

Scope Description Notes
application Holds elements that relate to the application as a whole.
client Contains elements that persist indefinitely for this particular client (browser).
cookie Refers to the scope of the calling page when a custom tag or module is called
server Used to store data that is accessible from any application on a particular server.
session Holds data pertaining to the user's session.
cluster Deprecated

What scope should I use in...?

Custom tags

Classic custom tags

The variables scope of a classic CFM-based custom tag is local to the custom tag only. It is safe to use that scope for any variables that you want to be available only within the tag itself.

CFC-based custom tags

The normal rules for CFCs apply.

Should I use scopes explicitly?

Different developers have opinions about whether it is best to explicitly write every scope, or to let Lucee look for the variable in each scope, i.e.




Please see Using scopes explicitly in code for details.

Further information required

  • CGI scope reference
  • thisTag

See also