первое.
– параметры нужны для универсальности работы функции (иначе одна функция будет работать только с конкретными идентификаторами)
– проще передать функции то, с чем она должна работать, чем каждый раз обращаться по полному пути.
второе.
есть такое понятие - "хороший стиль программирования"
местами это лажа полная
но по большей части - это действительно упрощает написание\чтение кода и уберегает от массы ошибок.
использование внешних переменных внутри функции считается плохим стилем - внутри функции следует использовать только локальные переменные и при необходимости передавать их наружу.
то, что "считается" совершенно не обязывает тебя этому следовать -
но если всякие сердитые дядьки "почему-то" решили, что так лучше, то скорее всего это не лишено смысла
