2014-10-31 4 views
0

Я пытаюсь понять закрытие в javascripts. Закрытие - это локальные переменные для функции, которые сохраняются в живых после возвращения функции [reference].Закрытие Javascript - родительская функция

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

Может кто-нибудь объяснить, правильно ли я думаю? Спасибо заранее ..

test1 = function() { 
    var x = 10; 
    return function(){ 
    alert(++x); 
    }; 
} 

test2 = function() { 
    var x = 10; 
    return function(){ 
    return function(){ 
     alert(++x); 
    } 
    }; 
} 

t1 = test1(); 
t1(); //11 
t1(); //12 
t2 = test2()(); 
t2(); //11 
t2(); //12 
+1

Я думаю, что вам не хватает кода вверху для 'test1' –

+2

Если родительская функция может получить доступ к переменной, то так же может быть и ребенок. Он не зависит от переменной *, явно выраженной * в родительском * немедленном *. –

+1

Единственное, что имеет значение здесь, это область действия переменной (где была определена переменная). Вы можете получить доступ так высоко, как определена переменная. –

ответ

1

Да, каждая сфера имеет доступ к своей родительской области, которая является транзитивным отношением - когда ваш родитель сфера может получить доступ к переменным из вашего великого родителя, и вы можете получить доступ к переменным от вашего родителя, то вы также можете получить доступ к тем из ваших дедушек и бабушек (и его родителей).

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