Those are two different constructs, so that's not a "vs" situation.

`$(foo)` runs `foo` and returns its output as a string -- prefer it over backticks. `$((2+2))` runs the arithmetic expression "2+2" and returns its result (4) -- prefer it over `expr "2+2"`.