• Какова механика работы замыкания?

    @lem_prod
    Надеюсь я буду отвечать в правильном направлении, так как вопрос задан, скажем так туманно.
    Во первых, как уже упомянули, функции inc1 и inc2 идентичны по смыслу.

    В чем вообще смысл использования замыканий в js, в подобных примерах.
    Допустим вам нужно много счетчиков, не важно зачем, просто по факту, если использовать просто функции, то это будет что-то на подобии:

    var counter1 = 0,
          counter2 = 2;
    
    function inc1() {
        retunr ++counter1;
    }
    
    function inc2() {
        retunr ++counter2;
    }
    
    //ну и потом можно их вызывать когда надо...
    //не очень красиво, это их только 2, а если надо 10... ну и т.д.


    И тут мы можем использовать замыкания для решения этой тривиальной задачи:

    function createCounter(startCount) {
      var counter = startCount || 0;
    
      return function() {
        return ++counter;
      }
    }
    
    var counter1 = createCounter();
    var counter2 = createCounter(5);


    в переменных counter1 и counter2 будут функции, которые при вызове будут возвращать значения counter, НО механизм замыканий обеспечивает, что эта переменная counter для каждой функции будет своя, потому, что при каждом новом вызове createCounter создается новая область видимости.
    Ответ написан
    Комментировать
  • Как правильно писать на MVP?

    @lem_prod
    не буду комментрировать именно Ваше описание реализации паттерна, лично я такое должен по клацать, чтобы представить связи.

    А по поводу "написать типичное приложение с хорошим кодом на MVP", я бы советовал просто взять любой MVP фреймверк, разобраться в архитектуре, и реализовать у себя...если конечно хотите "велосипед" собирать)
    Ответ написан
  • Есть ли визуальный HTML редактор для сайта с сохранением результата?

    @lem_prod
    То есть, если я правило понял, то текст для textarea подтягивается в бд уже вместе с тегами?

    ***
    на счет HTML не знаю, но для Markdown, есть вижет MarkdownEditor, я так понимаю, это то, что нужно, прикреплю скрин, как он выглядит.

    0bec1ed101214f798b5e89d553a5786c.png
    Ответ написан
    1 комментарий
  • Возможно ли получить всех вложенных детей?

    @lem_prod
    var pChilpren = document.querySelectorAll('Parent *');


    или

    var parent = document.getElementsByTagName('Parent'); //в случае если только один парент, вообще лучше через id 
    var child = parent.querySelectorAll('*');
    Ответ написан
  • Какой функцией "изменить" найденную с помощью RE часть текста?

    @lem_prod
    рабочий код писать не буду, опишу логику
    в переменную получить тело страницы var body = document.body.innerHTML
    по регулярному выражению ищем числа с количеством знаков после точки больше 3 /\d+\.\d\d\d\d+/g каждое найденное выражение заменяешь на округленное
    вот в помощь https://learn.javascript.ru/regexp-methods#str-rep...

    ну и потом обновляешь тело документа
    Ответ написан
    Комментировать
  • Почему странно работает цикл?

    @lem_prod
    var _a = document.querySelectorAll('.a'),
          _b = document.querySelectorAll('.b');
    
    for(var i = 0; i < _a.length; i++){
          _a[i].addEventListener('click', function(){console.log( _b[i] ); },false);
          _b[i].addEventListener('click', function(){console.log( _a[i] ); },false);
    }


    цикл идет 0 -> true, 1 - > true ... 3 - false( 3 < 3), потом когда вызывается функция console.log( _a[i]) оно ищет "i", находит собственно 3, а _a[3] у нас нет, только _а[0], _а[1], _а[2]

    обратите внимание, что вы добавляете НЕ:
    function(){console.log( _b[0] )
    function(){console.log( _b[1] )
    function(){console.log( _b[2] )


    а:
    function(){console.log( _b[i] )
    function(){console.log( _b[i] )
    function(){console.log( _b[i] )


    и эту "i" оно ищет потом, при вызове.

    Отвечаю на комментарий, для примера вот код:

    var l = 3;
    for (var i = 0, i < l; i = i + 1) {
    console.log(i); //0, 1, 2
    }
    
    console.log('после цикла:' + i); //3


    лучше всего запустите отладчик в консоле, и проследите все это...
    происходит следующее, первый заход "и" , "и" меньше "л"(правда), увеличивается "и" на одни, но в скобки попадает старое значение....как то так если на пальцах...
    тоесть, когда у вас выполняется 3 раз("и" == 2), оно увеличивает "и" на 1, то есть "и" == 3, но когда инструкция "и" меньше "л" не сработает, цикл дальше не пойдет, но и уже увеличена, потому что прибавление произошло в конце прошлого цикла.
    Ответ написан
    2 комментария
  • Тему диплома (сайт или приложение на телефон)?

    @lem_prod
    сделай какую то рисовалку типо, и выглядит красиво, и в вебе организовать легко, и функционал будет...а с canvas это не столь сложно.
    Ответ написан
  • Это правда что для AJAX лучше использовать метод GET а не POST т.к. он быстрее?

    @lem_prod
    первое, "GET - это запросы на получение, POST - это отправка", это высказывание условно, и сделано для того, что бы с имя запроса ассоциировалось с именем, НО ни что не мешает во первых, отправлять в "гет" данные(но они ограничены 2048 символами), делать "постом" запрос, при чем, "пост" запрос может точно так же отправлять данные в адресной строке.
    в итоге все зависит от того, как запрограммирован сервер, и ни что не запрещает написать, что "вот если с это строки приходит гет запрос, ничего не отдавать и сохранить данные которые пришли"

    второе, все общение между сервером и клиентом происходит в виде строк, в итоге неважно, гет это или пост, все будет в виде строк, НО вот этих строк в посте, как правило, больше, собственно по этому теоретически пост медленнее, но только потому что, как правило, передает больше данных.

    Мне вообще нужно загрузить с сервера большущий кусок простого текста, может подскажите какой метод лучше использовать?
    пост

    Да и ещё насколько я понял если использовать GET метод для AJAX запроса ведь останется ещё и URL с окончанием ?param1=value ?
    этот url и есть собственно запросом, так сказать "нельзя что-то спросить молча", эти строи и есть "то, что клиент "говорит" серверу"

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

    @lem_prod
    Если решили обходится без C, то надо копать в сторону WebSocket
    в частности socket.io для Node.js
    Ответ написан
    Комментировать
  • Как правильно установить NodeJS на сервер Убунту 14.04.03 LTS?

    @lem_prod
    - можно ли создавать папку проекта в отдельной папке в линукс?
    конечно, переменная node глобальна
    - нужно ли (при наличии в системе питона 2.7 к примеру) ставить для ноды apt-get install python-software-properties
    не в курсе, а собственно зачем?
    - нужно ли ставить apt-get install npm если считается что он УЖЕ включён в nodejs
    нет
    - почему при попытке поставить apt-get install express система говорит мне что ей нужен apt-get install node-express и одно ли это и то же, что и expressjs
    express ставится через npm: sudo npm install -g express
    - в какие КОНКРЕТНО папки падает сама нода и её модули? Необходимо ли определять им конкретный путь установки относительно места которое заготовлено под проект (очевидно что делать проект в папке с самой нодой не стоит, тут опустим хотя бы часть КЭПовства)
    не помню, сейчас под виндой сижу, не скажу, но по сути это не важно, посмотри первые выпуски скринкаста Кантора по ноде, он хорошо объясняет как ищется модули и как организовывать структуру
    Ответ написан
    5 комментариев
  • Источники для изучения Node.js?

    @lem_prod
    ну во первых, сейчас уже версия 5.7 стабильная, на днях обновили как раз, 4.х это версия длительной поддержки, я бы рекомендовал сразу 5+, потому что пока вы закончите обучение, 4.х может уже быть не актуально.
    скажу сразу, хорошей русской актуальной литературы НЕТ
    порядок обучения, какой я бы советовал, ссылки
    смотрите вот это https://www.youtube.com/watch?v=65O-kmgmRI4 оно скорее обзорное, но очень рекомендую начать именно с него, потому что дает понять, чем приходится иметь дело
    потом однозначно скринкаст Ильи Кантора, ссылку не кидаю, гуглится без проблем, главное не просто смотрите, а повторяете и экспериментируете, после каждого "урока" проверяйте документацию, у некоторых методов уже "красны" уровень стабильности, значит в ближайшем времени их не станет.
    как альтернативу кантору могу посоветовать https://habrahabr.ru/company/piter/blog/239461/ книгу, если больше любите бумажный вариант, но делаете тоже самое, сравниваете примеры с официальной документацией

    еще один момент, можете часто слышать что "node работает только с одним ядром", уже нет, сам сейчас с этим разбираюсь, появился модуль кластеров, русской информации оооочень мало

    как шпаргалка вот русская документация 0.6.0 https://github.com/kurokikaze/nodejs-docs-rus/tree...
    там маркдаун файлы, не думаю что скоро будет перевод свежее

    а, и на под конец, когда будете знакомится с express, на официальном сайте есть русская инфа с примерами.
    Ответ написан
    4 комментария
  • Что неверно в цикле?

    @lem_prod
    ну i это итерация, а j от куда берется?
    Ответ написан
  • NW.js vs Electron?

    @lem_prod
    С точки зрения производительности, они не сильно отличаются, собранные программы, будут занимать примерно одно и тоже количество памяти, тут скорее дело вкуса, NW.js связывается через package.json с главным *.html файлом, к которому подключается конфигурационный *.js, помоему все так если мне не подводит память, в elecnton связь тоже через *.json но ссылается непосредственно на конфигурационный *.js, который в свою очередь открывает окна и т.д.
    грубо говоря в NW.js главный .html файл, а в Electon .js
    я уже не помню особенностей первого, но знакомился в одно время с обоим платформами, и Electron мне показался на порядок логичнее, поэтому выбрал его, но чисто теоретически, один и тот же функционал можно реализовать и там и там.
    Ответ написан
    Комментировать
  • Как вернуть из асинхронных функции результат?

    @lem_prod
    конкретно по скрипту писать не буду, потому что не совсем понял, что та происходит, но попробую объяснить по поводу асинхронности, когда запускается асинхронная функция, в нее передаются агрументы(их количество бывает разным, в зависимости от функции) и последним аргументом callback-функция, в переводе, обратный звонок, вот эта функция имеет доступ к результатам выполнения предыдущей, и она может делать с этим результатом, что нужно, либо вернуть результат в общий поток, где он обработается, передаль другой функции, отослать результат браузеру и т.д. ...
    Ответ написан
    Комментировать
  • Как правильно менять тип переменной?

    @lem_prod
    тут вопрос скорее предпочтения, и понятности кода, например у меня есть переменная с числом var a = 100; пускай, и мне ее надо преобразовать в строку, варианты использовать toString() или, как как я знаю что при сложении строки с числом, число преобразуется в строку сделать: "" + a
    или если мне надо получить булево значение, я могу сделать !!a, но опять же,нужно понимать что происходит при этом.

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

    как заключение скажу, если есть желание в дальнейшем осваивать ЯП общего назначения, где зачастую строгая типизация, стоит уделять внимание преобразованию типов и не сильно привыкать к гибкости, потом менять свое представление будет сложно, НО с другой стороны, если вы собираетесь работать со скриптовыми языками, в частности в вебе, то конечно же надо понимать как они себя ведут и хорошо разобраться с преобразованием типов в разных ситуациях.
    Ответ написан
    Комментировать
  • В чем различие между?

    @lem_prod
    function superFunc (arg) {};

    function - запуск конструктора функции
    superFunc - имя функции
    () - переменные-аргументы
    {} - контекст выполнения
    получается сделали функцию с именем, аргументами и контекстом
    при этом вызов superFunc() идет по имени функции, хочу обратить внимание, что скобки по время вызова, это оператор вызова.

    var super = superFunc() - читаем справа налево, вызови функцию с именем superFunc и помести результат в переменную super.

    var super = new superFunc() - читаем справа налево, вызови функцию с именем superFunc как конструктор, создай с него объект который будет помещен в переменную super. Тут стоит обратит внимание, что функция нечего не возвращает, а создает объект по конструктору.
    Ответ написан
    Комментировать
  • Метод splice(). Какую ошибку я совершил?

    @lem_prod
    ты постоянно рандомишь число от 0 до 36, потом добавляешь в новый и вырезаешь....при этом длинна массива уменьшается, например ушло 4 с массива, в нем 32, а не 36, а рандом дает число больше 32...собственно его нет...место 36, используй длину массива, которая будет динамически изменяться при итерации...
    Ответ написан
    1 комментарий
  • Как удалить объект через функцию?

    @lem_prod
    var kill = function(obj) { // delete the object - does not work
    delete obj;
    }


    вызов kill(obj); удаляет объект, который находится в контексте самой функции проще говоря происходит примерно такое:

    есть var a = { ... };

    kill(a) /* obj = a; delete obj */ другими словами удаляет клона

    var kill2 = function(obj) { // replace with an empty object - does not work
    obj = {};
    }


    здесь объект очищается а не удаляется

    вопрос, чем встроенная функция не угодила? что должно происходить? просто delete a;

    а если через функцию:

    function kill_obj (obj) {
    detele window[obj];
    }
    
    kill_obj('str_name');
    Ответ написан
    2 комментария
  • Подгрузка изображений при скроле, как реализовать?

    @lem_prod
    в jquery есть уже готовые решения, но если я не ошибаюсь, суть работы в том что стоят теги картинки с размерами, но без src и обработчик на все картинки, что если скрол доходит до картинки, добавлять src...при этом надо взять во внимание, что при загрузке надо проверить какие картинки уже есть на экране и грузить их сразу.

    вот https://learn.javascript.ru/task/load-visible-img
    Ответ написан
    Комментировать