2012-02-15 1 views

ответ

4

Каждый omg() вызов возвращает новую функцию. Следовательно, вызов omg()[0]() изменяет локальное значение q этого конкретного экземпляра. Я думаю, что если вы сделали это так:

var a = omg() 
a[0](); 
a[1](); 

вы получите ожидаемый результат.

+0

Nit: Он возвращает новый массив, в котором есть элементы (свойства), которые называют двумя новыми функциями (которые «закрывают» «пространство» в лексической области, в которой они созданы) ... –

+0

Дух, благодарю вас за ловя это. – Prospero

3

Каждый omg() создает отдельное закрытие с отдельным объектом space.

Чтобы получить ожидаемое поведение, вам нужно вызвать omg()раз и вызвать обе функции в нем, используя ту же переменную:

var arr = omg(); 
arr[0](); 
arr[1](); 
1

Вы выполняете два раза omg(), чтобы получить два разных затвора с отдельным объектом space.

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