Witaj, po wrzuceniu tego na codepena, potęgowanie działa, ogólnie napisałeś taki "książkowy" algorytm, który jest nauczany w szkołach, ale nie za bardzo rozumiem co się stało z dwiema pozostałymi funkcjami, po ich uruchomienu wyskakuje komunikat:
Uncaught RangeError: Maximum call stack size exceeded
Oznaczający, że funkca wywołuje samą siebie w nieskończoność. W funkcji czyToPalindrom wywołujesz odwracanieWyrazu co przeczy troche definicji rekurencji(bo rekurencja to funckcja która wywołuje sama siebie), ponadto, mała literówka, nie lenght, tylko length. Tak ogólnie, to kompletnie nie rozumiem twojego zamysłu odnośnie funkcji czyToPalindrom, dlaczego w niej wywołujesz inną funckje z innym argumentem?
Co do drugiej funkcji, to warunek podstawowy, w twoim przypadku s.length == 0, nigdy nie nastąpi, bo niby kiedy długość s jest skracana?, więc funkcja wywołuje samą siebie w nieskonczoność.
Ogólnie w dwóch niedziałających funkcjach problem polega na tym, że warunek podstawowy nigdy nie jest spełniony, i przez co te funkcje wywołują sie w nieskonczonosc.
s-zmienna oznaczająca wyraz
i=0-zmienna oznaczająca początek wyrazu(więc 0)
j=s.length-1 = ostatnia litera wyrazu
funckcja palindrom
jeżeli i > j
return true;
w przeciwnym wypadku jeżeli s[i] !== s[j]
return false;
w przeciwnym wypadku
return palindrom(s, i+1, j-1);
To co wrzuciłem powyżej to jakiś tam pseudokod napisany na szybko, przedstawia on rekurencyjny algorytm na palindrom, coś podobnego miałem w szkole, spróbuj go zaimplementować, jeżeli nie będziesz rozumiał o co w nim chodzi napisz, spróbuje wytłumaczyc
Jeżeli zrozumiesz jak działa powyższy algorytm, to odwracanie wyrazu mozna zrobic analogiczne, z jednym małym ale, z którym mam nadzieje sobie poradzisz
EDIT
Tak ogólnie to radze nazywać zmienne w bardziej zrozumiały sposób(albo dodać do nich jakiś komentarz opisujący ich znaczenie), np w funkcji wykonującej potęgowanie, zmienne o nazwach podstawa i wykładnyk, mówiły by więcej niż x i y, szczególnie polecam dokładnie nazywać/opisywac zmiennie, wtedy gdy nie do końca rozumiesz jakiś algorytm, wtedy masz taką wizualną podpowiedź co jest czym.
Jeszcze druga sprawa, może się troche czepiam na wyrost, ale warto używać === zamiast ==, używając == możesz się czasem nieźle zdziwić, gdy "0" == 0 da ci true, więcej o tym np tu