Because the shell further expands unquoted $variables in command arguments (and in
for lists).
Code:
variable=$(cat text) # assignment: no further expansions aftet $-substitution
echo "$variable" # quotes permit $-substitution but no further expansions
The further expansions are
1. field splitting (using $IFS, InputFieldSeparator)
2. filename generation (e.g. if $variable has * wildcards).