У багатьох мовах програмування є можливість затінення змінних (Variable Shadowing). Затінення змінних полягає в оголошенні змінної в більш внутрішній області видимості з таким самим ім'ям, яке існує в зовнішній області видимості. Приклад у JavaScript:
function myFunc() { const my_var = 'test'; if (true) { const my_var = 'new test'; console.log(my_var); // new test } console.log(my_var); // test}Використання цієї можливості погіршує зрозумілість коду і може легко призвести до складно виявимих помилок. Тому я вважаю це поганою практикою. У своїх проектах я використовую eslint правило no-shadow для JS-коду та @typescript-eslint/no-shadow для TS. Вони не входять до
recommended, тому їх необхідно самостійно визначати у конфізі. На завершення історичний екскурс:
- синтаксис CoffeeScript забороняв Variable Shadowing
- tslint recommended мав no-shadowed-variable за умовчанням