Я думаю, что лексическая область видимости помогает компилятору и оптимизации. Хотя это зависит от того, что вы подразумеваете под помощью.
Лексическая или статическая область действия позволяет компилятору проверять наличие переменной при локальной ссылке, то есть в ее лексическом контексте. Он должен находиться в области действия метода, ссылающегося на переменную.
Чтобы сделать это в средах с динамической областью действия, необходимо учитывать все контексты вызова, так как функция знает все переменные, которые знает и ее контекст вызова. Чтобы убедиться, что переменная доступна для ссылки, во время компиляции потребуется рекурсивный возврат всех вызывающих контекстов.
Поскольку это очень сложно, оно будет опущено во время компиляции, генерируя исключения во время выполнения.
См. здесь : В динамической области, напротив, сначала вы выполняете поиск в локальной функции, затем - в функции, которая вызвала локальную функцию, затем вы ищете в функции, которая вызвала эту функцию, и так далее, до стека вызовов. «Динамический» относится к изменению в том смысле, что стек вызовов может отличаться каждый раз, когда вызывается данная функция, и поэтому функция может попадать в разные переменные в зависимости от того, откуда она вызывается.