Values

A variable can hold a literal, the result of an expression, an object, a function, or a value produced at run time (user input, a date, a network response); until assigned, it holds undefined. Assignment copies a primitive value, but shares an object by reference, so two variables can point at the same object.

Kinds of values, and copying versus sharingJavaScriptLive
const price = 30;                          // literal
const total = price * 1.08;                // expression
const item = { name: "Lamp", price };      // object
const describe = (x) => `${x.name}: $${x.price}`; // function
let answer;                                // declared, no value yet
console.log(total, describe(item), answer);
let a = price;  a += 1;                    // primitives are copied
const b = item; b.price = 45;              // objects are shared by reference
console.log(price, a, item.price);

The long total is binary floating-point rounding (Floating-Point Pitfalls). Changing b changed item, because both names refer to one object; Copying and Comparing shows how to copy objects instead.

Primitives are copied into each variable; objects are shared through references
Primitives are copied into each variable; objects are shared through references