ValueFunction[symb] represents a function to be applied whenever the symbol symb gets a new value.
The assignment ValueFunction[symb] = f specifies that whenever symb gets a new value val, the expression f[symb, val] should be evaluated.
If the value of symb is cleared, f[symb] is evaluated.
ValueFunction takes account of all ways that the value of a symbol can be changed, not just Set.
See also: Trace.