# 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: 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)
`````` 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)
`````` 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)
`````` 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: So what is going on?? 