2015-10-04 1 views
1

Я пытался закрепить свое понимание закрытия/обзорный в JavaScript с помощью следующего кода теста:Как моя внутренняя внутренняя функция имеет доступ к внешним переменным глобального масштаба? Разве это не нарушение сферы действия/закрытия?

var globalM = 1; 

function firstFx() { 

    function secondFx() { 
     console.log(globalM + 1); 
    } 

    secondFx(); 
} 

firstFx(); 

Я знаю firstFx будет иметь доступ к globalM потому, что в это сфера. Но как моя внутренняя функция secondFx также имеет доступ к переменной globalM? Он достигает двух уровней, я думал, что это невозможно. Однако результат 2 поступает на консоль.

+1

Потому что его глобальный. Это означает, что все функции/области доступа имеют к нему доступ. – Manu

+0

Нет ничего плохого в достижении 2 уровней. –

+0

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

ответ

1

У вашей второй функции есть доступ к ней, потому что переменная является глобальной. Это означает, что все области имеют доступ к нему.

Любая область видимости может иметь доступ ко всему, что объявлено глобально или на уровне выше. Например, в вашей функции внутренняя функция также может обращаться к любым переменным, объявленным в вашей внешней функции.

0

Не существует ограничений по уровням охвата, он выходит на мировой уровень.

Объем кода в функции - это область, в которой была создана функция плюс ее собственная область.

Смежные вопросы