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

    ну допустим не любую =) насколько я понимаю - замыкание - функа, работающая с внешними переменными в обход аргументов, ака:
    js//
    ExpandedWrap disabled
      var i = 0;
      function(j){ return i + j; };

    ну или:
    php//
    ExpandedWrap disabled
      $i = 0;
      function($j) use($i){ return $i + $j; };


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

    с чего это, если i присвоили новое значение?
      Цитата Serafim @
      с чего это, если i присвоили новое значение?

      <cut> :facepalm:

      Добавлено
      Ощущение гранитной стены передо мной возникает при всяком разговоре с вами... Так что до следующего раза.
      Сообщение отредактировано: OpenGL -
        Цитата MyNameIsIgor @
        Вы вообще понимаете значение слова "определение"? Вы можете сказать, как определяется замыкание в computer science?

        :facepalm:

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

        Лох в зеркале - обсирай :crazy:

        Цитата MyNameIsIgor @
        Пруф в виде пунктов ECMA стандарта или не было.

        :facepalm: :facepalm: :facepalm:
          Цитата MyNameIsIgor @
          Пруф в виде пунктов ECMA стандарта или не было.

          http://www.ecma-international.org/publicat...ST/Ecma-262.pdf см. по Variable Environment

          Добавлено
          Астарот, а что фейспалмишь, я даж нашёл его :D
            Цитата Serafim @
            ну допустим не любую =) насколько я понимаю - замыкание - функа, работающая с внешними переменными в обход аргументов, ака:

            Тогда любая функция - замыкание, так как может ходить за переменными выше по областям видимости :-? Тут определяющий момент - сохранение области видимости для дальнейшего использования - функция а, в нее вложена функция b, пользуящая переменные объемлющей функции. Я как-то привык думать, что замыкание возникает в тот момент, когда происходит выход из a, и при этом вовне передается b. То есть a уже закончила работу, но ее область видимости где-то лежит себе целехонькая, что бы b могло ей пользоваться :scratch:

            Цитата MyNameIsIgor @
            Так что до следующего раза.

            Скатертью по жопе, профпригодный :crazy: Оссспади, и мнение этого долбоящера кто-то всерьез считает весомым! :crazy:
              Цитата MyNameIsIgor @
              Ощущение гранитной стены передо мной возникает при всяком разговоре с вами... Так что до следующего раза.

              :facepalm:
              скажи мне, в чём разница между:
              ExpandedWrap disabled
                var i = 0;
                i = 23;
                print(i);


              и:
              ExpandedWrap disabled
                var i = 0;
                a = function(val) { i = val; }
                print(a(23));

              :)

              разница только в наличии функции. Но операции с i ничем не меняются =)

              Добавлено
              Цитата Астарот @
              Тогда любая функция - замыкание, так как может ходить за переменными выше по областям видимости

              это в JS так =) и только с внешними варами и глобальными переменными
              Сообщение отредактировано: Serafim -
                Цитата Serafim @
                Астарот, а что фейспалмишь, я даж нашёл его :D

                А что еще можно делать читая идиота, который сам не привел ни одного определения, наваял калечный код, который работает совершенно очевидным образом, но при этом забрызгал все слюнями доказывая, что он работает коряво и не правильно, да еще и ссылку хочет, прям требует? :crazy:

                Добавлено
                Цитата Serafim @
                это в JS так =)

                Так про него ж и говорим :D

                Цитата Serafim @
                и только с внешними варами и глобальными переменными

                Я и говорю - выше. Если выше var'а нет, то он не явно есть в глобальном контексте.
                  Короче спор ниочём =) Строки и числа - это примитивы и передаются только по значению, мне пытаются доказать обратное на примере:
                  ExpandedWrap disabled
                    var i = 0;
                    i = 23;
                    print(i); // Откуда 23? "Почему не 0, если передаётся по значению!" (с) MyNameIsIgor
                    Цитата Serafim @
                    Короче спор ниочём =)

                    Ну, так MyNameIsIgor же :D
                      в любом случае - ссылки\значения и отсутствие возможности их определять в JS настолько дикий отстой, что даже прототипно-ориентированное программирование по сравнению с этим - величайшее достоинство языка :D
                        Цитата Serafim @
                        в любом случае - ссылки\значения и отсутствие возможности их определять в JS настолько дикий отстой, что даже прототипно-ориентированное программирование по сравнению с этим - величайшее достоинство языка :D

                        Ну, так тогда нужно просто не пользоваться js и дело в шляпе :D Чё ныть-то?
                          Вообще-то внутри замыкания в жабе, очевидно передается ссылка на переменную. Так например две разные функцию могут менять одну и туже переменную: http://ideone.com/knsSLX
                          Переменная internal вышла за область видимости и поэтому в стеке ей делать нечего, посему она была скопирована в глобальную кучу (по сути переменные замыканий отличаются от глобальных только тем, что не занимают глобальную область имен) и ссылки на нее розданы трем функциям. Если ссылки на замыкание убились до того как переменные вышли из зоны видимости, то копирования может и не происходить, в данном случае в замыкания будут переданы ссылки на переменную в стеке. Впрочем тонкости реализации могут отличаться и особого значения не имеют, важно что примитивы таки могут быть переданы и даже изменены по ссылке, хотя и через зад.
                            Цитата applegame @
                            Вообще-то внутри замыкания в жабе, очевидно передается ссылка на переменную.
                            Нет :no: Просто при обращении к переменной - интерпретатор пытается найти её в текущем контексте, если не находит - ищет объявление выше, если не находит - ищет выше и т.д., пока не доходит до глобального. Если же и там её нету, то переменная создаётся :) Т.е. мы получаем не ссылку на переменную контекстом выше, а просто обращение происходит к первой попавшейся переменной контекстом выше ;)

                            Именно по-этому несколько функций и работают с одной переменной, т.к. var'ом ты объявил её именно в общем для всех трёх функций контектсе ;)

                            Добавлено
                            ну т.е. в чисто практическом плане - разницы никакой

                            Добавлено
                            Это просто принцип, скорее более идеологический. Если мы работаем с одной переменной, которая объявлена в контексте выше, тогда все операции всё равно по-значению, а если ссылка на переменную передаётся внутрь функции, тогда да, тут работа по ссылке =) Просто смотря с какой стороны смотреть. Именно по стандарту ECMA (ссылка выше) определено именно то, что я сказал - работа происходит с одной переменной выше с именем i, а не с ссылкой на переменную i
                              Цитата Serafim @
                              Нет :no: Просто при обращении к переменной - интерпретатор пытается найти её в текущем контексте, если не находит - ищет объявление выше, если не находит - ищет выше и т.д., пока не доходит до глобального.
                              Контекста выше не существует, он убит при выходе из функции get(). Ну думаешь же ты, что интерпретатор сохраняет все контексты выше замыкания? Это был бы сущий кошмар.
                                Цитата applegame @
                                Ну думаешь же ты, что интерпретатор сохраняет все контексты выше замыкания? Это был бы сущий кошмар.

                                Сохраняет =) Если переводить на русский язык - var - это приватная статическая переменная
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


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