`y[x_]=expr` means evaluate `expr`, then whenever you see `y[something]` evaluate evaluate what resulted. `y[x_]:=expr` means "whenever you see `y[something]`, evaluate `expr` anew".

Here's how to see it:

    a = 5;
    y[x_] = a*x
    
    y[3]
    a = 10
    y[3]
    (*
    15
    10
    15
    *)

That is, when you define `y`, it evaluates the right hand side to `5*x` and assigns that; if you change `a` later, it never sees it. On the other hand,

    a = 5;
    f[x_] := a*x
    
    f[3]
    a = 10
    f[3]
    (*
    15
    10
    30
    *)

Compare also:

    ?? y

![Mathematica graphics](https://i.sstatic.net/28rHs.png)
 
    ??f

![Mathematica graphics](https://i.sstatic.net/t7ijj.png)