Wait will not pauze the tick. It just postpones the actions in time, the events that follow just continue to run.
"Wait 0 seconds" is SPECIAL, it postpones the following actions until the end of the event sheet.
There is a wait before the function call. So the system sets the function call aside and runs some ticks. Then, when the wait (0.2 seconds) is over, it calls the function. There is no way to know exactly at what point the tick is now in the events.
So, the function gets called, denominator gets a new value. And it this point, due the first wait call, the events have been on the end of the tick. So mostly num1, num2 and result get a value.
I think the while loop can try like 4 or 5 times, then it all get caught up. If it dont guess more then 4/5 times it will probaly work, it has been a some times at the end of the events during the wait before the function call. But after that, the event ticker is caught up in the while loop, because it runs that while loop. And when the 'result' is illegal, it can be bigger then any denominator can be. But now, the event sheet wil not be at the end anymore, the moment where the waits postponed the actions. So, denominator gets a new value, but num1,num2 and result will never again get a new value. So the while keeps gooing. And thats a endless loop = a non responsive game. Or as you say = a crash.
Solution = Do not use 'waits', use timers.
The waits in the function are totaly not needed.
edit, they gave you that solution allready, i see.
restart the browser, it will work