• Что такое hoisting javascript?

    Подъём, когда при объявлении функции интерпретатор знает заранее обо всех локальных переменных этой функции, поэтому он поднимает объявление всех переменных в начало функции без инициализации.

    function func() {
        var i;
        console.log(i); // undefined так как инициализация происходит ниже по коду
        i = 1;
    }


    Отсюда вывод, что объявлять и инициализировать переменные функции нужно в начале функции.
    Ответ написан
    2 комментария
  • Как происходит всплытие переменной?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Всплытие происходит в начало функции (т.е. bar), где бы внутри функции вы ни объявили переменную через var.
    Ответ написан
    Комментировать
  • Как происходит всплытие переменной?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Объявления переменных и функций всплывают на верх области видимости, у var и function (та что declaration) - это внешняя функция или модуль (если на верхнем уровне дело происходит), у let и const - блок, то есть после всплытия, внутри движка Ваш код будет выглядеть так:
    var foo; 
    function bar() {
        var foo; // эта foo перекрывает foo из внешней области видимости, и поэтому в функции используется она
        if (!foo) { 
            foo = 10; 
        } 
        console.log(foo); 
    }
    foo = 1;
    bar(); //--> 10


    Так же важно знать, что хотя let и const всплывают наверх блока, но использовать их до фактического места объявления нельзя, так будет ошибка:
    {
        console.log(x); // ReferenceError: Cannot access 'x' before initialization
        let x;
    }
    Это механизм защиты "от дурака" и называется он "мертвое всплытие". По этому всегда лучше использовать let или const, притом const предпочтительнее если переменная не меняется, так как дает больше гарантий.
    Ответ написан
    2 комментария
  • Как происходит всплытие переменной?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Внутри функции наверх выплывает только объявление локальной переменной var foo;

    var foo = 1; // можно стереть
    function bar() { 
        var foo; // всплыло сюда. Этот foo – иной, чем верхний foo!
        if (!foo) { // тут foo undefined,  !foo === true
            foo = 10; // выполняется, назначается 10
        } 
        console.log(foo); // вывели 10
    } 
    bar(); //--> 10
    Ответ написан
  • Почему одно и то же приложение по-разному отображается на разных компьютерах?

    @tukreb
    Разное масштабирование в Windows 10 вызывает размытие.
    Попробуйте что-то из этого
    https://g-ek.com/kak-ispravit-razmyityij-shrift-v-...

    Я у себя всегда ставлю просто 100%
    Ответ написан
    1 комментарий
  • Что устанавливать на новый компьютер?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Если железо относительно новое и ОС - Windows 10, то можно поставить Chrome или Firefox (или оставить Edge - он все равно на движке Chromium). Ну и разумеется, не зависимо от браузера нужно в браузер прикрутить какой-нибудь AdBlock. Можно еще поставить торрент-клиент. Остальное - по необходимости.
    Ответ написан
    4 комментария
  • Как работает цикл?

    @gsaw
    Сначала инициализация переменной, потом проверка условия, потом тело цикла отработает если условие ОК, и только потом инкремент.

    То есть при i = 2, внутренний цикл только инициализацию проведет, проверит условие и больше ничего не будет, потом управление вернется внешнему циклу. При i = 3 один раз щелкнет внутренний цикл, при i = 4 сработает внутренний один раз, и второй раз сработает if и выполнится continue. и так далее
    Ответ написан
    4 комментария
  • Почему постфиксный и префиксный инкременты выдают одно и то же значение?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Разница между ++i и i++ только в том, чему равно само это выражение:
    let i = 0;
    alert(++i); // 1 – прибавили 1 и вернули результат
    
    let j = 0;
    alert(j++); // 0 – вернём значение до, и прибавим 1
    
    // после уже всё одинаково
    console.log(i, j); // 1, 1


    Тут подробнее и лучше: Инкремент/декремент
    Ответ написан
    Комментировать
  • Почему выводится 12?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что цикл хоть и пустой, но будет крутиться пока выполняется условие. А оно перестаёт выполняться когда b = 12.
    Ответ написан
    2 комментария
  • Как alert преобразовывает введенные данные в строчный тип?

    black1277
    @black1277
    Вольный стрелок
    Alert преобразовывает в строку полученный результат выражения, а само выражение выполняется по правилам синтаксиса языка, в данном случае в контексте number.
    Ответ написан
    Комментировать
  • Сравнение "буквенных" и "числовых" строк. Как происходит?

    Simkav
    @Simkav
    В вашем случае 123 не число а строка, при сравнении строк запускается цикл который переводит символ строки в юникод если не ошибаюсь, и сравнивается номер этих юникод символов
    P.S
    Ответ написан
    3 комментария
  • Что обозначают символы \n и \t в исходном коде?

    RALMAZ
    @RALMAZ
    JavaScript Developer
    \n - перенос строки
    \t - табуляция
    Ответ написан
    Комментировать
  • Чем отличаются друг от друга консоль и терминал?

    DevMan
    @DevMan
    если не пускаться в историю, отвечать в контексте вопроса и упрощённо:
    консоль - командная строка.
    терминал - программа, предоставляющая доступ к командной строке.
    Ответ написан
    Комментировать
  • Чем отличаются друг от друга консоль и терминал?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Артефакт, доставшийся в наследство от "больших" ЭВМ, где консоль - операторское устройство, с которой машина загружалась (это мог быть терминал общего вида, специализированный терминал или даже печатная машинка). В процессе загрузки работала только консоль, все остальные устройства (а у "большой" ЭВМ едрить сколько периферии!) - не работали.
    А терминал - это общее название устройства, состоявшего из клавы и монитора (а специализированный - это некий гибрид клавы, монитора и магнитофона для загрузки микропрограмм).
    Сейчас, как правило, консолью называют либо клаву и монитор компа, подключенные к системнику, либо виртуальную консоль ВМ, на которой отображается процесс загрузки, а терминалом - любую консольную программу, подключенную удаленно к данному компу. Разница все так же - с консоли ты можешь управлять загрузкой машины, а с терминала нет (ты можешь ее перегрузить, но процесс загрузки виден только на консоли)
    Ответ написан
    Комментировать
  • В чем разница между терминалом, эмулятором терминала и консолью?

    icCE
    @icCE
    youtube.com/channel/UC66N_jRyZiotlmV95QPBZfA
    Консоль - это совокупность устройств, которые позволяет вам взаимодействовать с устройством.
    Раньше консолью мог быть обычный принтер (в принципе и сейчас может), тогда это будет текстовая консоль/терминал. Не надо путать с текстовым интерфейсом.

    Терминал - По сути это так же устройство для ввода и вывода информации но
    >Консоль, это уже обёртка над терминалом.
    В корне не верно.

    Терминал, это уже надстройка над консолью и под собой больше подразумевает удаленный доступ с мало мощной машины. Раньше, это были очень и очень дешевые устройства, но медленные.
    Поэтому у каждого пользователя, была своя терминальная сессия разделенная по времени и ресурсу. (собственно сейчас почти все так же )

    В итоге - консоль, это работа непосредственно с самим устройство,терминал -некая удаленная работа.
    В графической среде мы запускаем эмулятор терминала, который дает нам доступ к "консоле" текущий или удаленной машины.
    Ответ написан
    Комментировать
  • За какое время можно изучить javascript?

    @Itvanya
    Скажу вам так : я уже долгое время занимаюсь фронт-эндом, мы пишем веб-приложения, 2d-3d игры, сайты и так далее. JS был моим следующим языком после Java. И, говоря честно, JS - абсолютно всеобъемлющий язык, который хорошо выучить очень непросто(гораздо сложнее, чем тот же Java). По-началу, смотря на этот код, половина из которого занимается только фиксами кросс-браузерности становится тошно, потом попроще, но ввиду "особой особенности" js и его прототипно-ориентированности, многие просто хотят вырвать себе глаза, что и делают любые программисты, переходящий с c/c++/c#/Java(любой другой более классический язык). Чтобы писать хорошие модули на JS, могут понадобится годы разработки. Объективно, если сидеть по 2-3 часа в день, результативно заниматься, то можно освоить js и самые начальные паттерны за 4-6 месяцев. Изучение Angular - вообще отдельная тема, которую так быстро ты не освоишь. Angular - это вам не убогий jQuery, от которого реально тошнит, Angular - это по сути отдельное изучение JS заново. Вот как-то так.
    Ответ написан
    7 комментариев
  • Зачем в bootstrap отрицательный margin в row ?

    Отрицательный отступ у row для того чтобы при многоуровневой структуре не суммировались отступы у блоков разных уровней.
    <div class="row">
        <div class="col-sm-12" id="outer">
            <div class="row">
                <div class="col-sm-12" id="inner">
                </div>
            </div>
        </div>
    </div>

    В приведенном примере блок #inner будет по размеру такой же как блок #outer. Если бы у row не было отрицательных отступов, то блок #inner был бы меньше блока #outer на 15px с каждой стороны.
    Ответ написан
    Комментировать
  • Почему не работает @media запрос?

    @Etiene
    Бывает, когда пишешь код css через препроцессор Sass, когда какой-то элемент был не принят препроцессором, по причине ошибки в написании, последующие изменения в код не вносятся, до исправления предыдущей ошибки. Поэтому, когда пишешь media - команда не срабатывает, так как была совершена ошибка в коде до этого (система кривая, но так уж она работает). Советую воспользоваться препроцессором Prepros, он после каждого изменения указывает подтверждения правильности кода, либо указывает на ошибку.
    Ответ написан
    Комментировать
  • Почему не работает свойство "justify-self: flex-end;"?

    Свойство justify-self относится к модулю CSS Grid и не работает при использовании в Flexbox.
    Ответ написан
    Комментировать
  • Как сделать выезжающее меню на сайте?

    eucalipt
    @eucalipt
    Самоделкин.
    Для блока слева создай отдельный элемент на странице. Например, div с id "menu". В него помещай все, что тебе нужно. Умеешь подключать JQuery? На всякий случай, объясню.

    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <!-- JQUERY -->


    Вот эту строчку впихни в head своей страницы. Теперь у нас подключен JQuery.
    Что мы делаем дальше? Дальше нам надо отловить клик по нашему "бутерброду" и после клика, собственно, и выдвинуть менюху. Как это делается:

    $(document).ready(function() {
      $("#menu").click(function() {
        $(this).addClass("show");
      });
    });


    Этот код просто выдели в отдельный .js файл (ну и подключи его как простой .js скрипт, разумеется. Только он должен быть подключен после того, как подключишь JQuery).

    Короче, что мы сделали: мы отловили клик по этому элементу и повесили на него функцию, которая к нашему div'у добавит класс "show". Дальше уже чистый css.

    #menu {
    /* тут твои стили */
    left: -350px;
    }
    
    #menu.show {
    /* тут твои стили */
    left: 0px;
    }


    Я думаю, суть ясна. Когда у менюхи появляется класс "show", то тогда мы просто "выдвигаем" ее из-за левого края страницы. По желанию можно сделать это плавным:

    #menu {
    /* тут твои стили */
    transition: left ease 0.2s;
    left: -350px;
    }
    
    #menu.show {
    /* тут твои стили */
    left: 0px;
    }


    Кстати, этот код написан под менюху, шириной в 350px.

    Теперь ее надо закрыть. Тут 2 способа. Хотя нет, 3.
    Можно отловить в нашем скрипте уход мышки с элемента и просто убрать класс "show" (mouseleave, removeClass()). А можно отловить клик по НЕэлементу див. Это тоже в JQ.
    А можно еще расставить флаги, и контролировать, когда меню открыта, при нажатии на бутерброд, делать одно, и когда закрыта - другое.
    Ответ написан
    4 комментария