• Для чего нужны замыкания (js)?

    AlexMaxTM
    @AlexMaxTM
    Ну если доступным, языком, то тогда на примере.
    Например, надо выводить в лог сообщение, а также номер строки и время прошедшее с момента зарузки страницы.

    Если не использовать замыкание, то надо определить следующую функцию
    function log(timespan, lineNumber, msg) { 
       console.log(linNumber + " " + timespan + " " + msg;
    }

    и две переменные
    var start = Date.now();
    var lineNumber = 1;

    Вызываем log так
    log(Date.now()-start, lineNumber++, "один");
    log(Date.now()-start, lineNumber++, "два");

    Очевидно, что это неудобно.

    Если использовать замыкание, то пишем так
    var log = (function () {    // функция 1
       var start = Date.now();  // текущее значение сохранятся в start 
       var num = 1;             // также используется в замыкании в функции 2. 
       return function (msg) {  // функция 2 - сохраняется в var log
          console.log(num++ + " " + (Date.now()-start) + " " + msg);
       }
    })();    // () -- вызываем функцию 1

    Вызываем так
    log("один");
    log("два");

    Результат
    lineNumber   timespan     msg
    ------------------------------
    1            0            один
    2            1            два

    Т.е. замыкание — это способ передачи данных в функцию.

    Подробнее о замыканиях см Mozilla Developer Network
    Примет взят отсюда
    Ответ написан
    Комментировать
  • Функция сортировки массива в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в документации на MDN неплохо описано назначение сортировочной функции:
    Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

    Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.

    Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).

    Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.

    Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
    Ответ написан
    Комментировать
  • Цифровые свойства объекта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В данном случае под "цифровыми" свойствами массива подразумеваются элементы, доступные по числовым индексам. Цикл for ... in проходит не по индексам, а по всем перечислимым свойствам объекта.
    var t = [];
    t[0] = 'a';
    t[100] = 'b';
    t.some = 'x';
    for (k in t) {
      console.log(k, t[k]);
    }

    0 a
    100 b
    some x
    Ответ написан
    1 комментарий
  • Цифровые свойства объекта?

    youngmysteriouslight
    @youngmysteriouslight
    ТК, ТТ, JS, FP, WM
    for(k in { x: 1, y: 2 }) { ... }
    k примет значения "x" и "y" в теле.
    Поскольку массив является объектом с ключами, которые являются числами, в цикле for(k in [1, 2]) { ... } k пройдёт значения "0" и "1".
    Однако, объект-массив содержит ещё некоторые поля, например, "length", который, однако, не проходит итератор. Если я правильно помню, в ES3 это было жестко вшито в семантику языка как исключение, а в ES5 это обыгрывается тем, у полей появились атрибуты, причём поле "length" имеет дескриптор enumerable.

    В процитированном фрагменте говорится буквально следующее: слева от in не обязательно будет экземпляр Array, даже если у этого объекта есть поля "0", "1" и т.п., при этом могут быть и другие поля, которые имеют заранее неизвестные дескрипторы. И стоит быть готовым к тому, что k в цикле for(k in obj) {...} может принять строковое значение, которое нельзя привести к числу.
    Ответ написан
    Комментировать
  • Как понять что достаточно изучил CSS?

    @SlideUp
    Согласен с Карен Мнацаканян. Если вёрстаешь без проблем то знаешь. Попробуй пройти какие-то тесты, поймешь что надо подтянуть. К CSS можешь добавить предпроц Sass/Less.
    По поводу изучение JS не совсем согласен tema_sun. Я думаю что если взялся изучать JS, то надо все внимание обратить на него что-бы понять полностю (P.S Сужу по себе, мнения могут быть разные).
    Ответ написан
    1 комментарий
  • Как понять что достаточно изучил CSS?

    Если верстаете сайт с нуля до конца то уже знаете css достаточно.
    Ответ написан
    Комментировать
  • Как понять что достаточно изучил CSS?

    tema_sun
    @tema_sun
    Нет такого. Учите js параллельно.
    Вообще, в современном мире если пытаться выучить (ха!) какой-то стек технологий и делать это строго последовательно, то можно и не начинать даже. Это займет вечность.
    Ответ написан
    Комментировать
  • Соседние селекторы css?

    SkiperX
    @SkiperX Куратор тега CSS
    https://codepen.io/SkiperX/pen/ggdzze
    https://codepen.io/Vestride/pen/dABHx
    https://codepen.io/dylanraga/pen/Qwqbab
    https://codepen.io/nxworld/pen/ZYNOBZ
    https://codepen.io/jamesbarnett/pen/yILjk
    https://codepen.io/abergin/pen/ihlDf
    https://codepen.io/hw/pen/biEBz
    https://codepen.io/Lingyucoder/pen/hFxvq
    тут есть

    редкая штука
    встречается при кастомизации чекбоксов и инпутов (в том числе когда на основе чекбокса делается спойлер или что-то открывается по клику по нему)
    css слайдер (не использовать в реальных проектах, просто знать что такое бывает)
    еще когда надо добавить отступ элементу который идет за текущим
    Ответ написан
    1 комментарий