Это немного зависит от этого вопроса.
- Почему локальность определяется во время компиляции, а не во время выполнения? Это чисто для производительности?
- Существуют ли языки, которые ищут свои переменные во время выполнения? То есть каждый раз, когда к переменной обращаются, эта переменная сначала выполняется в локальной области, а затем поиск проходит через все охватывающие области?
- Как языки ECMA справляются с этим?
Чтобы поставить вопрос 2 другими словами: Существуют ли языки, где работает следующий код (в необходимом синтаксисе):
def f(): print ('f')
def g():
f()
f = 42
g()