Чем друг от друга отличаются эти три выражения?
1) var i = 0;
if( (function(){return i%2==0})(i) ){
  console.log(i);
};
в условии функция, вызванная с глобальной i=0, вернет true, в консоль выведется 0

2) То же самое, что 1). Только в 1) функция обернута в скобки, и то что в скобках - вызывается, в 2) в скобки обернут результат вызова. В консоль - 0.

3) Нет вызова функции внутри скобок, но сама функция интерпретируется как true, и получаем тот же 0 в консоли.

Зачем это всё? В образовательных целях?
Первые две ничем. В третьей нет вызова функции