На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (66) « Первая ... 59 60 [61] 62 63 ...  65 66  ( Перейти к последнему сообщению )  
> JS и его "недостатки"
    Цитата Астарот @
    И где там замыкание?

    В месте соприкосновения оголённых проводов, вестимо.

    Добавлено
    Цитата Serafim @
    Во, астя всё верно написал

    Астя профнепригодный, а вы за ним повторяете.
      Цитата MyNameIsIgor @

      В месте соприкосновения оголённых проводов, вестимо.

      Другого ожидать от тебя по-прежнему не приходится? Ок.

      Добавлено
      Цитата MyNameIsIgor @
      Астя профнепригодный, а вы за ним повторяете.

      У профнепригодного меня почему-то не смешиваются переменные глобального контекста и те, что спрятаны в замыкании. А профпригодный ты, похоже, вообще не понимаешь о чем идет речь.
        Цитата MyNameIsIgor @
        Астя профнепригодный, а вы за ним повторяете.

        var - это приватная переменная в текущем контексте =) если она была объявлена в window (дефолтный контекст), то и обращение будет происходить с ней ;) Так что в том примере, что вы написали - всё логично донЕльзя == поведение совершенно очевидно и без всяких замыканий
        Сообщение отредактировано: Serafim -
          ExpandedWrap disabled
                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


          Какая печаль...
            Цитата Астарот @
            Какая печаль...

            o_0 а фигли оно так работает?

            Добавлено
            Цитата Serafim @
            o_0 а фигли оно так работает?

            а, всё, понял =)

            Добавлено
            Цитата Serafim @
            а, всё, понял =)

            значение 10 сохранилось в var i = 0;, а print(i) обращается во внешний контекст - 5
              Цитата Астарот @
              ты, похоже, вообще не понимаешь о чем идет речь

              Речь идёт про сказанную чушь, что примитивные данные всегда передаются по значению. Её опровергает даже ваш пример, изменяя локальную переменную, чего вроде как "никогда" происходить не должно.
              Цитата Serafim @
              var - это ... и далее капитанство

              Как это опровергает тот факт, что я привёл пример замыкания? определение замыкания приведёте? Или вы как Астя?
                Цитата Serafim @
                поведение совершенно очевидно и без всяких замыканий

                Да нету там замыкания - ну не с глобальным же контекстом оно замыкается :)

                Цитата Serafim @
                если она была объявлена в window (дефолтный контекст), то и обращение будет происходить с ней

                Разве он не будет просто идти вверх по скоупам до тех пор, пока не найдет искомую переменную? То есть не обязательно в глобальном контексте?

                Добавлено
                Цитата MyNameIsIgor @
                Речь идёт про

                Речь идет про то, что ты сказал "замыкание", привел якобы иллюстрирующий код, который оказался во-первых без замыкания, а во-вторых работал ровно так, как от него и ожидалось. Зачем ты его привел мне не понятно.
                  Цитата Астарот @
                  Речь идет про то, что ты сказал "замыкание", привел якобы иллюстрирующий код, который оказался во-первых без замыкания, а во-вторых работал ровно так, как от него и ожидалось. Зачем ты его привел мне не понятно.

                  Может, профнепригодный приведёт определение замыкания?
                    Цитата Serafim @
                    o_0 а фигли оно так работает?

                    Кхм... Ты не забыл для чего ключевое слово var вообще? :)
                      Цитата MyNameIsIgor @
                      Речь идёт про сказанную чушь, что примитивные данные всегда передаются по значению.

                      да
                      Цитата MyNameIsIgor @
                      Её опровергает даже ваш пример, изменяя локальную переменную, чего вроде как "никогда" происходить не должно.

                      а что должно происходить? коллапс вселенной?

                      Цитата MyNameIsIgor @
                      определение замыкания приведёте?

                      функа, оперирующая переменными вне своего контекста.

                      Добавлено
                      Цитата Астарот @
                      Кхм... Ты не забыл для чего ключевое слово var вообще?

                      яж уже говорил - приватная переменная в текущем (и вложенных) контектсе

                      Добавлено
                      Цитата Астарот @
                      Разве он не будет просто идти вверх по скоупам до тех пор, пока не найдет искомую переменную? То есть не обязательно в глобальном контексте?

                      ну да, именно так, я основываюсь на вышеозвученных примерах. Т.е. на частном случае
                        Цитата Serafim @
                        а что должно происходить? коллапс вселенной?

                        Так это вы мне скажите. Почему вдруг примитивный тип в замыкании оказывается по ссылке, хотя вы утверждали "никогда"?
                        Цитата Serafim @
                        функа, оперирующая переменными вне своего контекста

                        И почему функа, оперирующая переменными из глобального контекста, не является замыканием?
                          Цитата MyNameIsIgor @
                          Так это вы мне скажите. Почему вдруг примитивный тип в замыкании оказывается по ссылке, хотя вы утверждали "никогда"?

                          а он и не по ссылке. Он объявлен в window.i = 5; Внутри функции ты и написал window.i = new_i;

                          Добавлено
                          Цитата MyNameIsIgor @
                          И почему функа, оперирующая переменными из глобального контекста, не является замыканием?

                          почему же, по определению вполне является, имхо =) хотя я может чего-то не учитываю в силу отсутствия каких-либо знаний
                            Цитата MyNameIsIgor @
                            Может, профнепригодный приведёт определение замыкания?

                            Я привел код - это больше, чем сделал ты :crazy: И да, в данном случае замыкание - это область видимости вложенной функции, переданной за пределы объекта, в котором она объявлена. Соберешься спорить - спорь с Флэнаганом.

                            Добавлено
                            Цитата Serafim @
                            почему же, по определению вполне является, имхо =)

                            Тогда мы любую функцию должны признать замыканием :) Но тогда получится, то что обычно называют областью видимости - нафига нам два названия для одного и того же :crazy:
                              Цитата Serafim @
                              а он и не по ссылке. Он объявлен в window.i = 5; Внутри функции ты и написал window.i = new_i;

                              т.е. ты немного не так воспринимаешь свой код. Это не все var'ы передаются внутрь функции, а функция при обращении к переменной идёт вверх по стеку ;) Т.е. если бы var i передавалась внутрь функции, то да, внутри этой функции было бы новое значение i и var i из глобального контекста не учитывался бы, но в данном примере, что ты приводил - обращение происходит с одной и той же переменной, т.к. она обявлена только один раз =) После этого астя привёл пример, где i была объявлена внутри функции, т.е. обращение было уже с другой переменной, которая не затрагивала внешний var i
                                Цитата Serafim @
                                а он и не по ссылке

                                :facepalm: По значению что ли? :lool:
                                Ну, специально для болезных учеников Асти такой пример. Если бы get_value захватывала i по значению, то вывод во втором случае был бы 0.
                                Цитата Астарот @
                                И да, в данном случае

                                Вы вообще понимаете значение слова "определение"? Вы можете сказать, как определяется замыкание в computer science?
                                Цитата Астарот @
                                Соберешься спорить - спорь с Флэнаганом

                                Да мне по барабану какого лоха обсирать - только приведите его сюда.

                                Добавлено
                                Цитата Serafim @
                                Это не все var'ы передаются внутрь функции, а функция при обращении к переменной идёт вверх по стеку

                                Пруф в виде пунктов ECMA стандарта или не было.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (66) « Первая ... 59 60 [61] 62 63 ...  65 66


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1734 ]   [ 14 queries used ]   [ Generated: 25.08.26, 03:22 GMT ]