В чем разница между созданием scope переменных в JavaScript и Python

«В чем разница между созданием scope переменных в JavaScript и Python» — вопрос из категории JavaScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В JavaScript переменные имеют function scope (var) или block scope (let/const). В Python scope определяется только уровнями вложенности (функции, классы, модули).

Пример в JavaScript:

if (true) {
  let blockScoped = "visible only here";
  var functionScoped = "visible in whole function";
}
console.log(functionScoped); // работает
console.log(blockScoped); // ReferenceError

Пример в Python:

if True:
    local_var = "visible outside if"
print(local_var) # работает - нет блочной области видимости

def func():
    function_var = "only inside function"
print(function_var) # NameError

Ключевые отличия:

  1. В Python нет hoisting (поднятия переменных)
  2. В Python переменные в блоках (if/for) видны снаружи
  3. В JavaScript var "всплывает", let/const ограничены блоком