Потому что основное назначение замыканий - коллбэки. А-ля PHP: $d = 0; array_walk($arr, function ($e) use (&$d) { $d += $e; }); (это чисто пример, понятно, что сумму массива так никто не считает).
Я ща по всему коду своему пробежался и внатуре юзал ток на callback её в слиме. Когда надо было инстанс app в роутер передать. --- Добавлено --- какую я статью интересную нарыл: Замыкание на различных языках программирования --- Добавлено --- Походу на пыхе оно проще всего реализовано. В остальных же случаях как то тяжко к пониманию. А может от того что не до конца понимаю синтаксис...
в js вообще область видимости переменных странная так что там когда функтион в функтион делаешь дочерняя функция видит всё что в родителе --- Добавлено --- ну потому что там нет глобальной переменной и когда пишешь var то переменная по умолчанию для данной области становится как глобальной. Подозреваю именно поэтому
Вообщето есть. Если не писать var то переменная будет доступна везде. При этом они как бы "становятся свойствами" переменной window.
создай два объекта одного класса. Потом определи значение свойства одного объекта и проверь значение этого же свойства у другого объекта. Кроме того, объект может существовать вообще без класса.
Гы. PHP позволяет отстрелить себе ногу множеством способов. Что такое test в примере ниже? (даже можете включить вывод всех варнингов и нотисов) PHP: class A { } $a = new A(); $a->test = '10'; var_dump($a); print_r(get_class_vars('A'));
а не так. Вот: Код (Text): object(A)#1 (1) { ["test"]=> string(2) "10" } Array ( ) --- Добавлено --- test - свойство объекта.
вот. @keren, вот вам и в PHP такое же. Только злоуптореблять этим не надо. В 99.9% случаев это будет говнокод (ИМХО)
Не так то, конечно можно устроить демагогию и считать, что объект стал уже объектом другого - безымянного класса..
Увы. Что PHP что JavaScript такие языки, что позволяют слишком много вольностей. В обоих дофига всего "не по шаблону". Именно по этому, я согласен с кем то из отписавшихся выше (вроде в этой теме) начинать изучать программирование надо не с PHP...
@keren, свойства, если они не статические, именно у объектов, а не у классов. Пока не создашь объект, они не существуют. В JS же классов до недавнего времени в принципе не было, а объекты были. Глобальные переменные есть. В браузерном JS они становятся свойствами window, как уже было сказано, в серверном - я не в курсе, может быть там настоящие глобальные переменные. Но зато в JS есть вложенные функции, и на них распространяется механизм замыканий, поэтому они и видят локальные переменные родителей. Вложенные функции мне, как начинавшему с паскаля, было как раз легко понять.
По теории он создаёт экземпляр класса. --- Добавлено --- Если тебе это не о чём не говорит. То объект обращается к экземпляру своего класса, а не к классу который class. Собственно это вся суть ООП. Если ты этого не понимаешь тебе стоит почитать про это более детально. --- Добавлено --- и собственно говоря объект - это и есть экземпляр класса. Так что тут нужно просто понимать что происходит в момент создания нового объекта. Вообще нужно понимать что такое ООП. И не только в пыхе, а вообще везде. И мне так кажется что ты не понимаешь его вообще.
Потому что замыкания это особенность, которую несут в себе объекты типа closure. А объекты типа closure - создаются в виде анонимных функций. --- Добавлено --- Если не писать var, то при использовании строгого режима будет ошибка