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
Fixable: No
Why This Rule Exists
Using variables before declaration can be confusing. ES6let 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: booleanDefault:
true
Check function declarations. When false, allows calling functions before they’re declared.
classes
Type: booleanDefault:
true
Check class declarations. When false, allows referencing classes before declaration in upper scopes.
variables
Type: booleanDefault:
true
Check variable declarations. When false, ignores references from upper scopes.
allowNamedExports
Type: booleanDefault:
false
When true, allows references in export {} declarations (they’re safe even if declared later).
TypeScript Options
enums
Type: booleanDefault:
true
Check TypeScript enum references.
typedefs
Type: booleanDefault:
true
Check TypeScript type alias and interface references.
ignoreTypeReferences
Type: booleanDefault:
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:- You’re comfortable with hoisting and temporal dead zones
- Your codebase heavily uses forward references
- You need mutual recursion with function declarations