You only turn the first LED to white. The show function output whatever is in the leds array to the strip. The LEDs default to off (Black) so you are only setting the first (leds[0]) to White.
This will turn the first led (leds[0]) off and the rest on White.
#define FASTLED_ALLOW_INTERRUPTS 0
#include <FastLED.h>
FASTLED_USING_NAMESPACE
#define DATA_PIN 4
#define NUM_LEDS 4
#define MAX_POWER_MILLIAMPS 500
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
//////////////////////////////////////////////////////////////////////////
CRGB leds[NUM_LEDS];
void setup() {
delay( 3000); // 3 second delay for boot recovery, and a moment of silence
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setMaxPowerInVoltsAndMilliamps( 5, MAX_POWER_MILLIAMPS);
}
void loop()
{
leds[0] = CRGB::Black;
for(int n = 1; n < NUM_LEDS; n++)
{
leds[n] = CRGB::White;
}
FastLED.show();
}
When you think about it, that can't be correct. The idea of ws2812b is that you can set each led in the strip to a different colour. If that .show() function always made every led the same colour as the first, why not buy the cheaper non-addressable strips, where all the LEDs are always the same colour?
Did you know that you can online test FastLED code ? Scroll halfway this page: https://www.soulmatelights.com/ Type your code, and you see the result immediately. Or click the "Next example" button until you get to the examples that are more fun.
Even experts get things wrong! And not just sometimes, a lot. So don't worry. And apologies if I came over as condescending, old habits die hard. All I was saying is that with a little logical thinking, you didn't need an expert to tell you it was wrong.