Ответы пользователя по тегу JavaScript
  • Замыкания внутри циклов в JavaScript. Какова механика работы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    в курсе сюрпризов JavaScript относительно замыкание внутри closures.

    Если для вас это все еще сюрпризы - рекомендую перештудировать какой-нибудь туториал или документацию. В JS все как-будто асинхронно, на самом деле там просто есть event loop.

    Давайте разберемся на примере:

    for(var i = 0; i < 10; i++) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }

    Что у нас тут будет происходить. Мы берем цикл и 10 раз создаем отложенный вызов. Что при этом происходит... давайте представим себе что в JS все разбито на кадры. Цикл - один кадр, и пока он не отработает, какой бы он длинный не был - новый кадр так же не отработает. setTimeout не просто выполняет код с задержкой, через 1000 милисекунд в event loop будет добавлен очередной кадр. И любой "асинхронный" вызов так же просто добавляет кадр в event loop. Внутри же event loop все выполняется синхронно и по порядку.

    Так вот, на момент, когда закончит выполнение кадр с циклом, значение i уже будет установлено в 9. А как мы выяснили ранее, JS ничего более не будет выполнять до этого момента. Посему отложенный код выведет нам одно и то же значение так как все они ссылаются на одну и ту же переменную.

    Теперь, что происходит тут:
    for(var i = 0; i < 10; i++) {
        (function(e) {
            setTimeout(function() {
                console.log(e);
            }, 1000);
        })(i);
    }


    Да собственно то же самое. Только за счет того что мы при публикации setTimeout используем замыкание и передаем i в качестве аргумента, срабатывает механизм называемый copy-on-write. То есть в замыкании не i а его копия (когда цикл перезаписывает значение i - все кто ссылался на это значение не по ссылке, копируют себе переменную, для простоты можно просто думать что каждый раз когда вы передаете что-то не по ссылке, происходит копирование).

    Так как у каждого кадра, выполняемого в setTimeout есть своя копия i с нужным значением - все будет хорошо.
    Ответ написан
    2 комментария
  • Какие вы видите перспективы в развитии js "оберток"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    языка с низким порогов вхождения

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

    Использую сейчас ES6 как будущее JS. Планирую использовать TypeScript как только выйдет Angular2. Может и раньше, но пока лень.

    Преимущества банальны - меньше кода, все скучное генерируется. Самым сладким для меня лично являются стрелочные функции, сахар над объявлением своих типов (типа классы), проки и викмэпы и модули как основная фича которую я использую.

    От typescript мне интересно только описание типов для переменных и аргументов/возвращаемых значений. Аннотации - возможно.
    Ответ написан
  • Как дебажить javascript в PHPStorm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    man всему голова. Ну или в вашем случае help.

    https://www.jetbrains.com/phpstorm/help/running-an...

    update:
    Не внимательно прочитал. Такой возможности нет... наверное. В браузере можно воспользоваться sourcemaps для дебага, тогда исполняться будет сконкатенированный файл а браузер вам все будет расделять на исходники и бряки выполнять по ним же. Думаю через remote дебаг можно и в IDE сделать но не уверен.
    Ответ написан
  • Ошибка подписи APK Ionic?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это варнинг, а не ошибка. Вы можете использовать свой APK, он подписан.

    Начиная с версии 7u51 jarsigner кидает это предупреждение что бы предостеречь вас о возможности такой штуки:

    bugs.java.com/view_bug.do?bug_id=8023338
    Ответ написан
  • Чем проверить версию браузера? Modernizr? Как?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Только feature-detection. Никаких хардкодов версий браузеров.

    p.s. В реальности конечно так не бывает... У нас есть всеми любимая iOS которая привносит свой пласт боли.
    Ответ написан
    3 комментария
  • Стоит ли стараться обходиться без JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Анимации лучше делать через css. Вы можете запускать их из js (добавлением класса) но в целом...

    Если что-то относительно просто можно сделать через CSS - то лучше это делать через CSS. Если это как-то влияет на гибкость, приходится менять структуру HTML и т.д. - то тут уже стоит задуматься. Выбирать стоит не только самый производительный способ но и самый гибкий.
    Ответ написан
    Комментировать
  • Друзья, есть ли какие задачи для практики по JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Реализуйте unit-of-work, identity map и шаблон репозиторий на JS. Эдакую абстракцию позволяющую выделить persistence layer.

    Других идей под чистый JS нет. Все остальное будет хоть как-то связано именно с DOM и т.д.
    Ответ написан
    Комментировать
  • "Взлетит" ли Dart?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну... как бы никто не запрещает вам использовать Dart с существующими JS фреймворками. Просто это не слишком удобно. Опять же есть порт того же Angular на Dart.

    У Dart есть свои мегакрутые фичи, но так как всякие там мозилы и прочие отказались внедрять поддержку Dart в свои браузеры, то широкого распространения это дело не получит к сожалению.
    Ответ написан
  • Стоит ли использовать WebGl для 2d графики?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если дело я буду иметь только с 2d

    вы не поверите, но WebGL это именно 2D API так что это вполне себе нормальное использование. По сути это биндинг OpenGL для JS. Вам доступны шейдеры, вам доступны вычисления на GPU и все такое. То есть на голом opengl вы не сможете отрисовать 3D просто так. Либо вам придется писать шейдеры для всего этого добра, либо подключать какой-то 3D движек, который уже используя 2D API и шейдеры будет все это дело рендрить.
    Ответ написан
  • Как реализовать свой аналог confirm на angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Делаете сервис, в нем уже все остальное. Что до "остановить все и вся" - тут зависит от того что именно вы хотите остановить. Обычно достаточно добавить оверлэй что бы предотвратить пользовательские действия, и можно еще добавить интерцептор для запросов, который будет вклиниваться в цепочку промисов и приостанавливать все запросы на необходимое вам время.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Знаете, просмотрев ваши предыдущие вопросы... Распишите сами, построчно. Любое предположение. Пометьте непонятные вопросы. Иначе это будет не продуктивно (как я смотрю).

    Особенно непонятно про возвращаемую внутреннюю функцию и про "log"

    Читаем про замыкания и каррирование
    Ответ написан
    Комментировать
  • Как реализовать отрисовку по клику шаблон из дерективы и вставлять шаблон в ng-repeat?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ng-click, ng-include и т.д.
    Ответ написан
    Комментировать
  • Как создать условия в JAVASCRIPT Четные и нечетные(odd,even)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    n % 2 == 0
    Ответ написан
    Комментировать
  • Существует ли JSON filter как противоположность jQuery.extend/merge?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    lodash вам поможет.

    updated, исходя из вашего комментария (который стоит вынести в описание вопроса) вам нужно это все делать на основе ngModel и $touched/$dirty свойств инпутов. Нет?
    Ответ написан
  • Какой способ организации сайта без перезагрузки лучше?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да прочитайте вы уже про Single page applications, концепцию "клиент-сервер", REST и т.д. Так же перестаньте думать "страницами". Думайте состояниями. По сути body в html это ваш MainWindow, а там уже творите что хотите. Хотите текст в диве поменять - меняйте. Хотите пол страницы переделать - меняйте.

    Рекомендую вам начать с Backbone + Handlebars и плавно перейти на Angular/Ember. А может и вовсе с них начать и переходить на что-то более низкоуровневое (для развития понимания) только при недопонимании концепций этих фреймворков. Если вы знакомы с архитектурой серверных приложений - у вас то же самое будет (приблизительно) на клиенте. Только вместо базы данных будет rest api, раутинг так же, контроллеры так же будут обрабатывать конкретные состояния, добавится нормальный слой представления и возможно viewmodel. MVC изначально для интерактивных приложений создавался а не для request/response.
    Ответ написан
    Комментировать
  • Как организовать работу angular js c MySQL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Angular <-> REST Service <-> MySQL (или вообще что угодно)
    Ответ написан
    Комментировать
  • Плагин для кроссбраузерности в код JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://www.npmjs.com/package/autopolyfiller

    и справедливости ради стоит заметить что autoprefixer получше prefixfree
    Ответ написан
    1 комментарий
  • Какой веб-ферймворк под HTML5 выбрать для UI в крупной компании?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но последние стати на хабре про его минусы

    А вы статьи эти читали? А комментарии? Я работаю с Angular вот уже 2 года и ни разу не сталкивался с "проблемами" изложенными в статьях. Тем более что те проблемы которые на самом деле имеют место быть (слишком много букв надо писать для директив, сложно и т.д. к примеру) решаются либо сторонними модулями либо ждем Angular2. А так складывается впечатление что люди думают что могут взять какой-то фреймворк и он сразу же решит все их самые изощренные задачи.

    Ну и да, Angular это не UI фреймворк, это фреймворк для построения приложения в первую очередь. Внутри используйте хоть react.js на тех местах где он подходит лучше (я пока даже не знаю о подобных) хоть backbone (в качестве persistance layer и для моделек неплохо подходит).

    что до UI - Foundation, Twitter Bootstrap, а еще интереснее варианты - Google Material Design или еще чего посвежее... Ну или верстайте все сами. Если вы расчитываете на перспективы, то думаю поддерживать старые браузеры вы не будете уже. А значит можно использовать flexbox-ы те же, на которых построить сложный лэйаут не особо сложно.
    Ответ написан
    2 комментария
  • (Angular) Как вытащить класс и текст элемента на котором стоит click и вставить в то что этот клик вызывает?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ngRepeat.... вам для решения вашей задачи по идее вообще DOM не нужно трогать.
    Ответ написан
    Комментировать
  • _escaped_fragment_ работает с HTML5 адресами?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    только #!/product/name и только при наличии мета тега. Работает одинаково как для гугла так и для яндекса и для bing. Для ссылок вида /product/name это не имеет особо смысла.
    Ответ написан
    5 комментариев