plotting – Evaluation order of multi-argument function and why is () sometimes equivalent to Evaluate[]?


So this question has two parts: 1) How can the order of evaluation of a multi-argument function be determined? and 2) Why does () seem to be equivalent to Evaluate() in some cases?

I was plotting a user defined function:

Plot(f(x), {x, -10, 10}, ImageSize -> Large, 
 PlotLegends -> Map(ToString, c), PlotRange -> All)

but the output was not what I expected:
enter image description here

Easy fix; I put Evaluate() around the function and got what I wanted:

Plot(Evaluate(f(x)), {x, -10, 10}, ImageSize -> Large, 
 PlotLegends -> Map(ToString, c), PlotRange -> All)

enter image description here

Now to add some styling to the plots. The input

Plot(Evaluate(f(x)), {x, -10, 10}, 
 PlotStyle -> Thickness(#) & /@ {0.01, 0.001}, ImageSize -> Large, 
 PlotLegends -> Map(ToString, c), PlotRange -> All)

does not plot, even though Thickness(#) & /@ {0.01, 0.001} is a list. So I put Evaluate() around that and got what wanted:

Plot(Evaluate(f(x)), {x, -10, 10}, 
 PlotStyle -> Evaluate(Thickness(#) & /@ {0.01, 0.001}), 
 ImageSize -> Large, PlotLegends -> Map(ToString, c), 
 PlotRange -> All)

enter image description here

Then, from another post on the site I realized that putting () around Thickness(#) & /@ {0.01, 0.001} works too:

Plot(Evaluate(f(x)), {x, -10, 10}, 
 PlotStyle -> (Thickness(#) & /@ {0.01, 0.001}), ImageSize -> Large, 
 PlotLegends -> Map(ToString, c), PlotRange -> All)

enter image description here

So maybe now I can go back and replace Evaluate(f(x)) with (f(x))!

Plot((f(x)), {x, -10, 10}, 
 PlotStyle -> (Thickness(#) & /@ {0.01, 0.001}), ImageSize -> Large, 
 PlotLegends -> Map(ToString, c), PlotRange -> All)

Nope:

enter image description here

So what is going on??