If you are looking for **complete answer**, take a look at Mr. Wizard's :)

Also, see the **comments of @JacobAkkerboom** below, who proved I was too hasty. :)

I was **right** that the function OP is asking about at the end is `Precedence` but I was **wrong** in my interpretation of what is happening.

I will leave this for future visitors as it is not so obvious.

Also, everyone that upvoted, feel free to un-upvote if you wish :)

## right part: ##


----------
Precedence of functions is given by `Precedence` :)

More here: [What are some useful, undocumented Mathematica functions?][1]

"Good old fashioned" `[]` is safer but I really like `@`, I just have to remeber what is going to happen basing on my experiece, because no one will remember all precedences :)

In fact, sometimes I like to do `f @ ( some code )`. The more different brackets, the more transparent code is, IMO.


----------

## wrong part ##

 Precedence[Apply]
 Precedence[Compose]
> 620
> 670

**So that's why** `Tr[Times]` is done before `Times` is applied to the list.

What is also an answer to your question about precedences of functions. It is `Precedence`, an undocumented function.

There is a discussion about what `@` is. In my opinion `f @ g` does not mean that there's operation `Prefix` with `f` on `g`. `Prefix` is only a syntax form(?). What is happening is:

 Compose[f, g]

That's why I've checked `Precedence` of `Compose`.

More about `Compose`: [Why there is no name...][2] (*this link is true itself :P*)

----------

As you see the wrong part is longer... 


 [1]: http://mathematica.stackexchange.com/a/819/5478
 [2]: http://mathematica.stackexchange.com/questions/28778/why-there-is-no-name-for-12