Поскольку в тот момент, когда вы вызываете функцию, назначение еще не произошло.
var a; // hoisted, value undefined, no function
// later
a = function (x) {
alert(x);
}(function() {
a(1); // a is still no function
}());
Или вам нужно вставить точку с запятой, чтобы отделить назначение от вызова,
var a = function(x) {
console.log(x);
};
(function() {
a(1);
}());
или взять void
для разделения
var a = function(x) {
console.log(x);
}
void (function() {
a(1);
}());