Зачем в функцию передавать переменные в качестве параметров, если они выдны по замыканию?

JS мой первый язык, по началу изучения было все логично и понятно, но через некоторое время, спустя сотни строк кода, я пришел к выводу, что не понимаю базовых вещей,хотя уже понимаю более сложные. Собственно вопрос: Например, есть простая функция сложения чисел,в которую мы передаем 2 числа введенных пользователем:

window.onload = function(){
const x = +prompt("Введи x","");
const y = +prompt("Введи y","");
function sum(num1,num2){
return num1 + num2;
}
console.log(sum(x,y));
}

Все работает, все понятно. Но зачем передавать параметры, если функция sum() и так видит переменные x,y за счет замыкания и без проблем с ними работает?

window.onload = function(){
const x = +prompt("Введи x","");
const y = +prompt("Введи y","");
function sum(){
return x + y;
}
console.log(sum());
}

Результат тот же. В чем тогда разница, объясните, пожалуйста.


Ответы (1 шт):

Автор решения: Андрей Солуянов

Первое, что нужно принять, изучая Js, - что это язык достаточно свободный. В нем ты можешь делать одну задачу разными вариантами. И при этом любой из этих вариантов будет рабочий. То есть твой вопрос сейчас, если абстрагироваться от программирования, выглядит так. У меня две кувалды, одна синяя, другая белая. Почему я должен бить именно белой? Ответ: Ты можешь бить любой кувалдой, какой пожелаешь сам.

Но вернемся в Js. Почему способ без передачи параметров в функцию может оказаться в каких то историях хуже, чем тот, в котором передают. Представь себе, что у тебя программа стала на 10000 строк, и если у тебя переменные передаются в функцию. То читая такой код, ты сразу понимаешь, что о! в эту функцию передаются переменные. А если этого не происходит, то ты можешь с трудом найти потом, откуда вообще они взялись.

Также когда ты добреешься до более глубокого изучения области видимости переменных, то не всегда у тебя получится как в твоем примере получить переменные, не передовая их через функцию.

Примерно так в общих чертах можно ответить на твой вопрос.

→ Ссылка