Почему работа for и forEach отличается?
show.lenght — опечатка тут (вместо length).
Использовать надо for.
Метод querySelectorAll возвращает не массив, а объект типа NodeList, в который метод forEach был добавлен совсем недавно.
https://developer.mozilla.org/en-US/docs/Web/API/N...
То есть работать это будет только в самых свежих браузерах (наверняка тестируете в последнем Хроме).
Ну либо надо полифил добавлять.