JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 59 60 [61] 62 63 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#901
,
|
|
|
|
|
Сообщ.
#902
,
|
|
|
|
Цитата MyNameIsIgor @ В месте соприкосновения оголённых проводов, вестимо. Другого ожидать от тебя по-прежнему не приходится? Ок. Добавлено Цитата MyNameIsIgor @ Астя профнепригодный, а вы за ним повторяете. У профнепригодного меня почему-то не смешиваются переменные глобального контекста и те, что спрятаны в замыкании. А профпригодный ты, похоже, вообще не понимаешь о чем идет речь. |
|
Сообщ.
#903
,
|
|
|
|
Цитата MyNameIsIgor @ Астя профнепригодный, а вы за ним повторяете. var - это приватная переменная в текущем контексте =) если она была объявлена в window (дефолтный контекст), то и обращение будет происходить с ней Так что в том примере, что вы написали - всё логично донЕльзя == поведение совершенно очевидно и без всяких замыканий |
|
Сообщ.
#904
,
|
|
|
|
![]() ![]() var i = 5; function closure() { var i = 0; return function(new_i) { i = new_i; print("Inner i = " + i); } } var c = closure(); print(i); c(10); print(i); Цитата 5 Inner i = 10 5 Какая печаль... |
|
Сообщ.
#905
,
|
|
|
|
Цитата Астарот @ Какая печаль... o_0 а фигли оно так работает? Добавлено Цитата Serafim @ o_0 а фигли оно так работает? а, всё, понял =) Добавлено Цитата Serafim @ а, всё, понял =) значение 10 сохранилось в var i = 0;, а print(i) обращается во внешний контекст - 5 |
|
Сообщ.
#906
,
|
|
|
|
Цитата Астарот @ ты, похоже, вообще не понимаешь о чем идет речь Речь идёт про сказанную чушь, что примитивные данные всегда передаются по значению. Её опровергает даже ваш пример, изменяя локальную переменную, чего вроде как "никогда" происходить не должно. Цитата Serafim @ var - это ... и далее капитанство Как это опровергает тот факт, что я привёл пример замыкания? определение замыкания приведёте? Или вы как Астя? |
|
Сообщ.
#907
,
|
|
|
|
Цитата Serafim @ поведение совершенно очевидно и без всяких замыканий Да нету там замыкания - ну не с глобальным же контекстом оно замыкается ![]() Цитата Serafim @ если она была объявлена в window (дефолтный контекст), то и обращение будет происходить с ней Разве он не будет просто идти вверх по скоупам до тех пор, пока не найдет искомую переменную? То есть не обязательно в глобальном контексте? Добавлено Цитата MyNameIsIgor @ Речь идёт про Речь идет про то, что ты сказал "замыкание", привел якобы иллюстрирующий код, который оказался во-первых без замыкания, а во-вторых работал ровно так, как от него и ожидалось. Зачем ты его привел мне не понятно. |
|
Сообщ.
#908
,
|
|
|
|
Цитата Астарот @ Речь идет про то, что ты сказал "замыкание", привел якобы иллюстрирующий код, который оказался во-первых без замыкания, а во-вторых работал ровно так, как от него и ожидалось. Зачем ты его привел мне не понятно. Может, профнепригодный приведёт определение замыкания? |
|
Сообщ.
#909
,
|
|
|
|
Цитата Serafim @ o_0 а фигли оно так работает? Кхм... Ты не забыл для чего ключевое слово var вообще? |
|
Сообщ.
#910
,
|
|
|
|
Цитата MyNameIsIgor @ Речь идёт про сказанную чушь, что примитивные данные всегда передаются по значению. да Цитата MyNameIsIgor @ Её опровергает даже ваш пример, изменяя локальную переменную, чего вроде как "никогда" происходить не должно. а что должно происходить? коллапс вселенной? Цитата MyNameIsIgor @ определение замыкания приведёте? функа, оперирующая переменными вне своего контекста. Добавлено Цитата Астарот @ Кхм... Ты не забыл для чего ключевое слово var вообще? яж уже говорил - приватная переменная в текущем (и вложенных) контектсе Добавлено Цитата Астарот @ Разве он не будет просто идти вверх по скоупам до тех пор, пока не найдет искомую переменную? То есть не обязательно в глобальном контексте? ну да, именно так, я основываюсь на вышеозвученных примерах. Т.е. на частном случае |
|
Сообщ.
#911
,
|
|
|
|
Цитата Serafim @ а что должно происходить? коллапс вселенной? Так это вы мне скажите. Почему вдруг примитивный тип в замыкании оказывается по ссылке, хотя вы утверждали "никогда"? Цитата Serafim @ функа, оперирующая переменными вне своего контекста И почему функа, оперирующая переменными из глобального контекста, не является замыканием? |
|
Сообщ.
#912
,
|
|
|
|
Цитата MyNameIsIgor @ Так это вы мне скажите. Почему вдруг примитивный тип в замыкании оказывается по ссылке, хотя вы утверждали "никогда"? а он и не по ссылке. Он объявлен в window.i = 5; Внутри функции ты и написал window.i = new_i; Добавлено Цитата MyNameIsIgor @ И почему функа, оперирующая переменными из глобального контекста, не является замыканием? почему же, по определению вполне является, имхо =) хотя я может чего-то не учитываю в силу отсутствия каких-либо знаний |
|
Сообщ.
#913
,
|
|
|
|
Цитата MyNameIsIgor @ Может, профнепригодный приведёт определение замыкания? Я привел код - это больше, чем сделал ты И да, в данном случае замыкание - это область видимости вложенной функции, переданной за пределы объекта, в котором она объявлена. Соберешься спорить - спорь с Флэнаганом. Добавлено Цитата Serafim @ почему же, по определению вполне является, имхо =) Тогда мы любую функцию должны признать замыканием Но тогда получится, то что обычно называют областью видимости - нафига нам два названия для одного и того же |
|
Сообщ.
#914
,
|
|
|
|
Цитата Serafim @ а он и не по ссылке. Он объявлен в window.i = 5; Внутри функции ты и написал window.i = new_i; т.е. ты немного не так воспринимаешь свой код. Это не все var'ы передаются внутрь функции, а функция при обращении к переменной идёт вверх по стеку Т.е. если бы var i передавалась внутрь функции, то да, внутри этой функции было бы новое значение i и var i из глобального контекста не учитывался бы, но в данном примере, что ты приводил - обращение происходит с одной и той же переменной, т.к. она обявлена только один раз =) После этого астя привёл пример, где i была объявлена внутри функции, т.е. обращение было уже с другой переменной, которая не затрагивала внешний var i |
|
Сообщ.
#915
,
|
|
|
|
Цитата Serafim @ а он и не по ссылке По значению что ли? ![]() Ну, специально для болезных учеников Асти такой пример. Если бы get_value захватывала i по значению, то вывод во втором случае был бы 0. Цитата Астарот @ И да, в данном случае Вы вообще понимаете значение слова "определение"? Вы можете сказать, как определяется замыкание в computer science? Цитата Астарот @ Соберешься спорить - спорь с Флэнаганом Да мне по барабану какого лоха обсирать - только приведите его сюда. Добавлено Цитата Serafim @ Это не все var'ы передаются внутрь функции, а функция при обращении к переменной идёт вверх по стеку Пруф в виде пунктов ECMA стандарта или не было. |