Skip to main content

no-use-before-define

In JavaScript, variables and functions can be used before they’re declared due to hoisting. This rule enforces that variables are declared before use.
Rule Type: Problem
Fixable: No

Why This Rule Exists

Using variables before declaration can be confusing. ES6 let and const even throw ReferenceError when accessed before declaration (temporal dead zone).

Rule Details

This rule warns when it encounters references to identifiers that haven’t been declared yet.

Examples

Incorrect Code

Correct Code

Options

This rule has detailed options for controlling what it checks:

functions

Type: boolean
Default: true
Check function declarations. When false, allows calling functions before they’re declared.
Function declarations are hoisted, so it’s safe to set this to false. However, leaving it true enforces a clearer code style.

classes

Type: boolean
Default: true
Check class declarations. When false, allows referencing classes before declaration in upper scopes.
Classes are NOT hoisted. Setting classes: false can be dangerous.

variables

Type: boolean
Default: true
Check variable declarations. When false, ignores references from upper scopes.

allowNamedExports

Type: boolean
Default: false
When true, allows references in export {} declarations (they’re safe even if declared later).

TypeScript Options

enums

Type: boolean
Default: true
Check TypeScript enum references.

typedefs

Type: boolean
Default: true
Check TypeScript type alias and interface references.

ignoreTypeReferences

Type: boolean
Default: true
When true, ignores all type references (in type annotations, assertions, etc.).

"nofunc" Shorthand

Shorthand for { "functions": false, "classes": true, "variables": true }:

Common Patterns

Mutual Recursion

Temporal Dead Zone

Export Patterns

When Not to Use It

Disable this rule if:
  1. You’re comfortable with hoisting and temporal dead zones
  2. Your codebase heavily uses forward references
  3. You need mutual recursion with function declarations
For most projects, this rule helps catch bugs and improves code clarity.