1. JavaScript / Говнокод #23688

    0

    1. 1
    2. 2
    var lol = (timeout) => setTimeout(lol, setTimeout(console.log, timeout, 'kek'), timeout);
    lol();

    Запостил: inho, 30 Января 2018

    Комментарии (30) RSS

    • Нужны специалисты. Это аналог
      :(){ :|:& };:

      на жабьем скрипте?
      Ответить
      • Насколько я пони, оно будет через неодинаковые промежутки времени (айди таймаута как миллисекунды) писать кек
        Ответить
      • Эта на коком языке?
        Ответить
      • Это бесконечный цикл. Меня больше интересует, как это работает

        var lol = (timeout) => setTimeout(lol

        lol же еще не определен. Или там как в питоне позднее связывание?
        Ответить
        • Кончил тебе на губешник.
          Ответить
        • Лучше приведи пример изыка где так нельзя.
          Ответить
        • Позднее
          var f = () => x;
          f(); // error
          var x = 1;
          f(); // 1

          Но тут вообще var lol уже определено. Т.е. сначала определяется var lol, затем строится выражение, зависящее от lol, затем оно присваивается самой переменной lol.
          В статическом питухе была бы переменная типа Function/FuncPtr/Delegate/Block, которая тоже бы сначала определилась, а потом заполнилась выражением, которое вполне может на неё ссылаться и знать её тип.

          https://ideone.com/R1KVv6
          #include <iostream>
          #include <functional>
          
          int main() {
          	std::function<int(int)> fac = [&fac](int x){ return x > 0 ? x * fac(x-1) : 1; };
          	std::cout << fac(5) << std::endl;
          	return 0;
          }

          Единственное, тут пришлось задать тип fac явно и захватывать по ссылке.
          Ответить
          • > Но тут вообще var lol уже определено.
            Ну хз как. В жаве матерится

            int a = a + 1;

            Exception in thread "main" java.lang.Error: Unresolved compilation problem:
            The local variable a may not have been initialized
            Ответить
            • Хуйня ваша java https://ideone.com/CPbW4a
              Ответить
            • В int a = a + 1; значение "a" ещё не готово, хотя сама переменная уже есть. В случае fac идёт доступ по ссылке, в случае lol - тоже примерно по ссылке.

              > Exception
              То есть успешно скомпилировалось.
              Вот если правая часть бы как-то использовала ссылку, может и сработало бы без падений.
              Ответить
              • Не ссы, лягуха, болото будет нашим.
                Ответить
              • Ну да, наверно так. Но почему оно не берет i = 0, как обычно?
                Ответить
                • Не ссы, лягуха, болото будет нашим.
                  Ответить
                • Попробовал на ideone - и там, и там вообще ошибка компиляции (флаги компилятора не те?)
                  Могу лишь предположить, что int a = ... - и есть самая-самая первая инициализация переменной, перед которой уже не ставят других инициализаций.
                  Ответить
                  • https://ideone.com/lI8HdR
                    Может эклипс по-другому ошибки выводит.
                    Ответить

    Добавить комментарий