Skip to content
Bug reportAug 25, 2026· 0:24· 15 views

ESLint: no-use-before-define silent on IIFE body — false negative with { variables: false }

0:24 total

Comments · 0

Be the first to comment.

Bug report— by SceneRecap AI

mediumrules/no-use-before-define
os: macOSbrowser: Chromium 151.0.7922.34viewport: 1280x720

Repro steps

  1. 1.Open ESLint Playground
  2. 2.Configure rule no-use-before-define with ["error", { "variables": false }]
  3. 3.Provide an immediately invoked function expression accessing a variable before definition: (() => { console.log(a); })(); const a = 5;
  4. 4.Observe reported linter errors

Expected

Linter reports an error for variable 'a' accessed before declaration in an immediately executed function scope.

Actual

No lint error is generated for the IIFE reference.

Evidence

visualControl case at t=0.0s correctly triggers 'no-use-before-define' on class static block referencing foo.
visualAt t=11.0s, IIFE referencing variable 'a' prior to declaration produces no lint errors in bottom panel.
Issue markdown (copy-paste ready)
## Bug Report: no-use-before-define false negative on IIFE with { variables: false }

### Summary
When configuring `no-use-before-define` with `{ variables: false }`, referencing a variable inside an immediately invoked arrow function before its declaration does not raise an error.

### Repro Steps
1. Configure ESLint with `/*eslint no-use-before-define: ["error", { "variables": false }]*/`.
2. Add code snippet:
   ```js
   (() => {
     console.log(a);
   })();
   const a = 5;
   ```
3. Observe playground output.

### Expected
Error reported for `a` used before initialization.

### Actual
No errors reported.

*Recorded with SceneRecap.*

Your recordings could explain themselves too.

Free plan · silent recordings welcome · bug reports included.

Try SceneRecap free
ESLint: no-use-before-define silent on IIFE body — false negative with { variables: false } · SceneRecap