В этом qq
назначается функция динамически.
var spo = function(){
// qq is undefined here
var qq = function(){};
// qq is defined here
}
С другой стороны, в этом случае qq определяется как функция, которая видна везде в spo
var spo = function(){
// qq is defined here
function qq(){};
// qq is defined here also
}
РЕДАКТИРОВАТЬ: в вашем обновленном коде фактическая проблема видна, без точки с запятой после функции, что приводит к неправильному выражению, как показано ниже
var qq = function(){}()(); // This is causing TypeError
Поставьте точку с запятой после функции.
var qq = function(){
console.log(s);
}; // you missed this semi colon
(function(){
while(q){
console.log(q);
q--;
}
qq.call();
car.call();
})();