Die Erklärung - der übergebene Parameter von setTimeout wird im später beim Aufruf als Quellcode interpretiert. Dieser Aufruf erfolgt jedoch nicht mehr innerhalb deiner Funktion - daher ist "id" dann nicht mehr bekannt. Du kannst jedoch den Inhalt von "id" in deinen Quellcode-String einsetzen. Dann stehen zum Zeitpunkt des eigentlichen Aufrufes alle Informationen zu Verfügung.
---
Weaverslave