Суть js. В js часто функции используются как параметры. Например, функция вызывающая две функции:
function someFunc(argFunc1, argFunc2) {
argFunc1();
argFunc2();
return 5; //эта функция возвращает число 5
}
func1() {
console.log("FUNC 1");
}
func2() {
console.log("FUNC 2");
}
Console.log(someFunc(func1, func2));
Теперь посмотрим на setInterval(func, time). Здесь func - функция, time - время в мс. setInterval создаёт отдельный поток, который каждые time мс запускает на выполнение функцию func. Именно указатель этого потока возвращает функция setInterval.
Поток с функцией не связан, он только запускает её на выполнение, поэтому Ваш код: clearInterval(go); не имеет смысла. Нужно остановить поток, а не функцию.
var intervaID = setInterval(go, 1000); //в intervalID помещаем ID исполняющего потока
var z = 0;
function go() {
if(z == 10) {
clearInterval(intervalID); // останавливаем исполняющий поток
}else {
++z;
}
}