Tout simplement parce que le premier paramètre de tes setTimeout est mauvais 
Le premier paramètre doit être une référence à une fonction, or ni
$(".slideshow"+slide).fadeIn()
ni
switch_slides(first_slide, slide, end_slide, delay)
n'en sont.
Dans le premier cas, c'est une instruction jQuery, dans le second, c'est le résultat de l'exécution de la fonction.
La bonne syntaxe serait :
setTimeout(switch_slides, delay);
puisque dans ce cas, tu passes bien une référence à ta fonction et non plus le résultat de son exécution, le problème c'est que comme ça, tu ne peux pas passer de paramètre... Il faut alors utiliser une fonction anonyme englobante :
setTimeout(function(){switch_slides(first_slide, slide, end_slide, delay)}, delay);
et dans ce cas, tu passes bien une référence à cette fonction anonyme qui lancera la bonne fonction avec les bons paramètres
Partager