• Почему выводится число, а не undefined?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    В данном примере код аналогичен чему-то подобному:

    var i = 3;
    var i = i; 
    console.log(i); //3


    Аргументы функции - обычные переменные, которые объявляются перед ее выполнением в ее же области видимости и приравниваются тому, что задумано.

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

    Может быть этот материал разъяснит эту ситуацию
    для каждой переменной (var)

    – создаётся свойство VO с именем переменной, и значением undefined; если в VO уже присутствовало свойство с таким именем, оно остаётся нетронутым.
    Ответ написан
    Комментировать
  • Почему цикл выводит десять раз undefined?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    var i  //Создать переменную i (undefined) в данной области видимости
     = i;  //Затем присвоить ей значение переменной переменной i (которую только что создали - undefined)


    И не важно - в замыкании вы так сделали или еще где. У интерпретатора такая логика, и это вполне нормально. А господа выше, почему-то валят все на самовызывающуюся функцию...один ляпнул, другие повторили.

    Самый адекватный подход - не использовать одинаковые имена переменных в подобных схемах.
    Ответ написан
    Комментировать
  • Почему цикл выводит десять раз undefined?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Здесь используется самовызывающая функция, а для нее механизм замыканий работает по-другому. Она вызывается не в контексте цикла, а в самом корне. Ей попросту не передаются локальные переменные. Если нужно передать, добавьте ей эти переменные как аргументы.
    Ответ написан
    Комментировать
  • Почему цикл выводит десять раз undefined?

    @lega
    берется извне переменная i и присваивается переменной i
    Там не так, имя "i" захватывается не в момент var, а с начала блока и до конца, тот же результат будет если var i переместить в конец:
    for (var i = 0; i < 10; i++) {
      (function() {
          console.log(i);
          var i;
      })();
    }

    То же самое с именованными функциями, они создаются сразу, а не с точки где опубликованы:
    foo();  // вызов
    function foo() {console.log('FOO') }  // объявление
    Ответ написан
    Комментировать
  • В чем различия этих конструкций в JavaScript?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Краткий ликбез по JS: Как работает прототипное наследование: при обращении к свойству оно ищется сначала в самом объекте, потом, если не найдено, в том объекте, который указан как прототип (скрытое свойство [[Prototype]]) для исходного, потом в прототипе прототипа и так далее, пока прототип не null. Что происходит, когда мы вызываем new SomeFunction(): создается новый объект у которого [[Prototype]] ссылается на SomeFunction.prototype, в контексте этого нового объекта вызывается SomeFunction (как если бы через apply или call), полученный объект возвращается.

    1) В первом варианте у вас в конструкторе лишняя операция. А если таких методов 10? А если надо создать 10000 таких объектов?
    2) Во первом варианте у вас каждый инстанс будет непосредственно иметь ссылку на getName. Во втором — каждый инстанс будет иметь ссылку на прототип, в котором уже будет ссылка на getName. Значит, первый вариант будет жрать поболе памяти (однако обращение к методу getName будет работать чуточку быстрее).
    3) Можно так делать, если очень надо переопределить getName для данного объекта. Но с точки зрения архитектуры — не стоит, лучше создать отдельный класс или фабричную функцию, которая будет возвращать объект с нужным getName. Причина: black magic, который задолбаешься искать по коду.
    4) На данный момент времени, можно, наверное, начинать писать на ES2015 с нативными классами, чтобы не придумывать велосипеды с колесами из костылей:)
    Ответ написан
    6 комментариев
  • В чем различия этих конструкций в JavaScript?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    1) Все должно быть на своем месте, разложено по полочкам, это основа JavaScript кода. Оправдывается это тем, что над кодом могут работать несколько человек и если у каждого будет свой бардак, то в итоге кто-то может сделать вот так:
    function getName(){...} //вы объявили функцию
    //code
    //code
    function getName(){..} //Еще какой-то господин объявил функцию
    //Что в итоге? -Объявлена будет вторая.

    2) Статичные свойства объекта принято выносить в его прототип, так как создавать множество объектов с идентичным методом getName - глупо, только память забивать.

    И если и уподобляться первому варианту, то так:

    function Person (name, age) {
      this.name = name;
      this.age = age;
    }
    
    Person.prototype.getName = getName;
    
    function getName() {
        return this.name;
    };
    
    var Mike = new Person('Mike', 24);
    var John = new Person('John', 30);
    
    Mike.getName === John.getName;// true
    Ответ написан
  • Что значит выражение "рендериться на сервере"?

    @dmitryKovalskiy
    программист средней руки
    Это значит что html-разметка в полном объеме формируется на веб-сервере. Значит не используются javascript-фреймворки для отрисовки страницы на стороне клиента. Да, и успокойте меня, скажите что знаете перевод глагола render в контексте программирования?
    Ответ написан
    3 комментария
  • Что значит выражение "рендериться на сервере"?

    @SergeyZelensky-Rostov
    Ответ написан
    Комментировать
  • Как работает данная конструкция на JavaScript?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ничего хитрого здесь нет, суть проста - либо берем существующий объект-модуль и работаем с ним в функции, либо если его нет- создаем. Это такая старая реализация модульности...

    //module = [undefined] значит создаем новый с пустого объекта 
          var module = (function (obj) {
              obj.x=1;
              obj.z=3;
              return obj;
          })(module || {});
    
    //module = [object] продолжаем работать с уже созданным 
          var module = (function (obj) {
              obj.x=2;
              obj.y=1;
              return obj;
          })(module || {});
    
          console.dir(module);
    Ответ написан
    6 комментариев
  • Как работает данная конструкция на JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Шаблон проектирования Модуль
    Ответ написан
    Комментировать
  • Как работает данная конструкция на JavaScript?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Так более понятно будет?
    function f(obj){
      //code
    }
    var module = f(f() || {});
    Ответ написан
    4 комментария
  • Как структуризировать процесс обучения?

    copist
    @copist
    Empower people to give
    У вас среди вопросов уже был подобный и в нём уже указан приоритет технологий для изучения (ответ).

    А Petja указал правильный подход изучения каждой отдельной технологии (ответ)

    Я хотел бы раскрыть пункт "4. Практика и еще раз практика, решение множества конкретных задач"

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

    Для примера были взяты свежие задачи с бирж фрилансеров weblancer.net и fl.ru типа "создать тему к CMS", "сделать посадочную страницу" (landing page) или "разработать сайт-визитку".

    Были рассмотрены следующие способы изучения:
    1. Повторить работы опытных фрилансеров. Исходные макеты либо не дали, либо они уже отличаются от того, что есть на сайте.
    2. Включиться в открытый проект. Проблема в том, что сверстать страницы HTML можно несколькими способами, вплоть до image map или таблиц. А сравнить-то результат вёрстки не с чем.
    3. Взять где-нибудь бесплатно или купить шаблон, к которому прилагается макет PSD, изучить свёрстанный вариант и повторить. Это оказался самый эффективный способ. Платные шаблоны делают профессионалы, "вылизывают" их, доводят до совершенства. И бесплатные шаблоны есть очень крутые, но их мало.


    Мы использовали шаблоны с templatemonster. Там есть шаблоны под популярные CMS и просто HTML шаблоны. Также позже брали примеры из обзоров (35 примеров прекрасных посадочных страниц...) и повторяли несколько из них. Несложный макет в итоге верстается за сутки.

    Это покрывает темы (из указанного же списка):
    • XHTML, HTML4, HTML5
    • CSS2.1, CSS3
    • JavaScript, Ajax
    • jQuery
    • Twitter Bootstrap
    • CSS Grids
    • CSS Frameworks
    • Progressive Enhancement, Graceful Degradation
    • Responsive Web Design
    • CSS Pre-Processors (LESS / Sass)
    • CMS (WordPress, Joomla)
    • Data Formats (JSON, XML)
    • Internationalization / Localization
    • Image Editing Tools (Photoshop, Fireworks, etc.)
    • работа со шрифтами

    Задачи типовые, а охват тем сразу вот какой обширный. Изучение в интенсивном темпе заняло 2...4 месяца. Профессионалом так быстро не станешь, но на позицию junior уже можно претендовать.

    Так что мои советы:
    1. Чтобы получить бесценную практику, занимайся реальными вещами, а не учебными примерами
    2. Используй опыт профессионалов, чтобы повторять и копировать лучшие решения

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

    xamd
    @xamd
    javascript-ninja
    Я скажу вам так: даже если вы изучите все существующие на свете книги по самым лучшим методологиям, практического опыта вам не заменит ничего. Теоретические знания - это важно, они предотвращают большую часть говнокода. Особенно в этом помогают шаблоны проектирования. Но вопрос был немного не в этом, поэтому возвращаюсь к теме: я бы рекомендовал вам купить подписку на ресурсы а-ля codeschool и т.п., такие ресурсы помогают получить правильную базу. Как ни крутите, но лучший расклад - это "знать по чуть-чуть", на большее вы не сможете рассчитывать в первое время. Я искрине желаю вам удачи, и верю, что у вас всё получится!
    Ответ написан
    1 комментарий