Создают ли аргументы функции, определенной внутри функции, ошибку, когда они совпадают с аргументами заключающей функции?

#javascript

#javascript

Вопрос:

Допустим, у меня есть функция:

 function hi(message) {
    return message;
}
  

И у меня есть функция внутри этой функции:

 function hi(message) {
    function say(message) {
        return message;
    }
    say("hello");
}
hi("sup");
  

Не мешают ли аргументы друг другу, если они совпадают?

Ответ №1:

Внутренние аргументы функции будут скрывать внешние.

Ошибок не будет.

Комментарии:

1. Ну, ошибок не будет, пока затенение кого-нибудь не смутит, конечно 🙂

Ответ №2:

Нет.

 // let this be message #1
function hi(message) {
    //Inside this scope we have message === #1

    // let this be message #2
    function say(message) {
        // inside this scope we have message === #2
        return message;
    }
    say("hello");
}    
hi("sup");
  

Это будет работать так, как ожидалось.

С точки зрения удобства чтения / сопровождения я думаю, что повторно использовать имена параметров / переменных плохо.

У вас также есть проблема с тем, что во внутренней функции ваша #2 переменная является затеняющей переменной #1

Это означает, что к ней невозможно получить доступ #1 внутри say