SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
JavaScript
Базовые знания

Михаил Давыдов
Разработчик JavaScript
Базовый синтаксис

Expression (Выражение, Оператор),
Statement (Блочное выражение, Блок)
Statement

    •  Блочное выражение
     –  if (){}, try{}catch(e){}, function a(){}

    •  Директива интерпретатору
     –  return, throw, break, continue, var, …

    •  Может включать другие блочные выражения
    •  Может включать выражения
    •  Не возвращает значение
    •  Не может быть аргументом Expression
    •  Можно сделать из Expression – Expression;
4
                                            http://es5.github.com/#x12
Expression

    •  Оператор
     –  С одним аргументом typeof, !, (), ++, --, new, +,…
     –  С двумя ==, ===, >, <, instanceof, +, -,…
     –  С тремя a?b:c,…
     –  Вызов функции
     –  Оператор запятая

    •  Может включать другие операторы
    •  Не может включать Statement
    •  Возвращает значение
    •  Может быть в составе Statement

5
                                       http://es5.github.com/#x11
Приведение типов
Приведение типов




    •  Зависит от оператора
     –  Оператор имеет определенный алгоритм

    •  Зависит от типа аргументов и мест
    •  Внутренние функции JavaScript
     –  ToNumber, ToString, ToBoolean, ToObject




7
Пример: оператор + и примитивы
    Сильно перегружен: сложение чисел, конкатенация строк


     “2” + 3; // “23”

     2 + 3;     // 5




     // Что происходит в внутренностях JavaScript:

     if (Type(“2”) === “String” || Type(3) === “String”) {
         return Concat(ToString(“2”), ToString(3));
     } else {
         return ToNumber(2) + ToNumber(3);
     }




8                               http://es5.github.com/#x11.6.1
Что если один из операндов
    – Object?



9
Пример: оператор + объект
     Применяется тот же алгоритм
     Вся «магия» в ToString({})

      “2” + {}; // ”2[object Object]”

      Concat(ToString(“2”), ToString({}));

      ToString({}) -> ToPrimitive({}, “String”)

      ToPrimitive({}, “String”) -> ({}).[[DefaultValue]](“String”)

      if (IsCallable({}.toString)) {
          return ({}).toString();
      } else if (IsCallable({}.valueOf)) {
          return ({}). valueOf();
      } else {
          throw new TypeError();
      }

10                                 http://es5.github.com/#x8.12.8
На самоподготовку [] + {};




11
Операторы == и ===
     The Abstract Equality Comparison Algorithm
     http://es5.github.com/#x11.9.3

     '' == '0'                 //   false
     0 == ''                   //   true
     0 == '0'                  //   true
     false == undefined        //   false
     false == null             //   false
     null == undefined         //   true

     The Strict Equality Comparison Algorithm
     http://es5.github.com/#x11.9.6

      '' === '0'                 //   false!
      0 === ''                   //   false!
      0 === '0'                  //   false!
      false === undefined        //   false!
      false === null             //   false!
      null === undefined         //   false!
      +0 === -0                  //   true!
12
Оператор typeof
     Алгоритм
     - Ссылка не достижима (IsUnresolvableReference) – возвращаем "undefined"
     - Иначе смотрим по таблице

     Type(val)                                  Результат

     Undefined                                              "undefined"
     Null                                                     "object"
     Boolean                                                 "boolean"
     Number                                                  "number"
     String                                                    "string"
     Object (нативный и не имеет [[Call]])                    "object"
     Object (нативный или не нативный и                      "function”
     имеет [[Call]])
     Object (не нативный и не имеет [[Call]])        Не "undefined", "boolean",
                                                         "number", "string"
13                                http://es5.github.com/#x11.4.3
WAT?



     •  [1]     >   0;   //   ?
     •  [1,1]   >   0;   //   ?
     •  [1,]    >   0;   //   ?
     •  [1,,]   >   0;   //   ?

     •  [1] > "0";       // ?


14
WAT?



     •  [1]     >   0;   //   true
     •  [1,1]   >   0;   //   false
     •  [1,]    >   0;   //   true
     •  [1,,]   >   0;   //   false

     •  [1] > "0";       // ?


15
Функции

Function Declaration,
  Conditional Function Declaration,
Function Expression,
  Named Function Expression,
  IEFE
На самом деле Function в
     JavaScript – это Object со
     скрытым полем [[Call]]


17               http://es5.github.com/#x13.2
Function Declaration/Definition
     - Это Statement
     - Инициализируется во время входа в контекст
     - Объявляется в блоке функции или в глобальном блоке

      a(); // OK

      function a() {

             b(); // OK
             function b() {

             }
      }

      a();




18
                                      http://es5.github.com/#x13
Conditional Function Declaration
     - Это тоже Statement
     - Инициализируется во время входа в контекст или в рантайме
     - По стандарту такая запись недопустима

      if (true) {
          function a() {
               return 1;
          }
      } else {
          function a() {
               return 2;
          }
      }

      a(); // Firefox – 1, Others - 2




19
CFD+Strict Mode

     - При использовании строгого режима возникнет ошибка SyntaxError

      "use strict";
      if (true) {
          function a() {
               return 1;
          }
      } else {
          function a() {
               return 2;
          }
      }
      // SyntaxError

      // Function Expression!



20
Function Expression
     - Это expression
     - Инициализируется в рантайме
     - Объявляется где угодно

      a(); // error
      var a = function () {

           b(); // error
           var b = function () {

           };
           b(); // ok
      };

      a(); // ok




21
                                http://es5.github.com/#x11.2.5
Named Function Expression
     - Это тот же Function Expression
     - Можно обратиться к себе по своему имени
     - Имя доступно только в своем блоке (кроме старых IE)

      (function timer() {

           setTimeout(timer, 1000);

          console.log(+new Date);
      }());

      typeof timer; // undefined, Old IE - function




22
IEFE
     - Это тот же Function Expression
     -  Мы даем понять интерпретатору, что этот код - Function Expression
     -  IEFE позволяет эмулировать блочную область видимости

      function (){}();        // SyntaxError

      !function    (){}();    //   OK
      +function    (){}();    //   OK
      *function    (){}();    //   OK
      (function    (){}());   //   OK
      [function    (){}()];   //   OK

      var a = function (){}();
      var a = (function (){}()); // The best




23
Область видимости

Определяется во время создания функции
Не меняется при передаче функции
Образует цепочку областей видимости
Лексическая
Образует «замыкание»
Область видимости
     var a = 1;

     function foo() {
         var c = 2;

         function bar(e) {
             return a + c + e;
         }

         return bar(3);
     }

     foo(); // 6




                                 http://es5.github.com/#x10.3
25                               http://es5.github.com/#x10.2
Цепочка областей видимости

      GLOBAL
      a      1
      foo    func(on


                       foo
                       c     2
                       bar   func(on


                                       bar
                                       e     argument

26
Вызов функции и this

 this – основная грабля в JavaScript
   Прямой вызов
   Вызов через c оператором точка и []
   Вызов через new
   Вызов через call, apply, bind
This в JavaScript
     определяется во время
     вызова функции!


28            http://es5.github.com/#x11.2.3
Прямой вызов – через оператор ()
     () – это оператор вызова функции
     this всегда undefined но он трансформируется в global
     В строгом режиме всегда undefined (трансформации нет)

      function a() {
          console.log(this);
      }

      a(); // window (undefined -> window)


      function b() {
          “use strict”;
          console.log(this);
      }

      b(); // undefined



29
Оператор . и []

     Это Expression
     this – объект от которого был получена эта функция

      var foo = {
          bar: function () {
              console.log(this);
          }
      };
      foo.bar(); // foo

      var baz = {};
      baz.bar = foo.bar;
      baz.bar(); // baz

      var fooBar = foo.bar;
      fooBar(); // ???



30                                 http://es5.github.com/#x11.2.1
Оператор new
     Это Expression
     new – это еще один способ вызова функции
     Каждая функция может быть конструктором
     this – пустой объект со ссылкой на prototype вызываемой функции



      var A = function () {
          console.log(this);
          console.log(this.__proto__ === A.prototype);
      };

      new A(); // Object, true




31                                http://es5.github.com/#x11.2.2
Call, apply

     Это способ управлять значением this
     this – объект, который вы передаете



      var a = function (a, b) {
          console.log(this, a, b);
      };

      a.call([]);               // [], undefined, undefined
      a.call([], 1, 2);         // [], 1, 2

      a.apply([], [1, 2]); // [], 1, 2




                                   http://es5.github.com/#x15.3.4.4	

32                                 http://es5.github.com/#x15.3.4.3
Bind
     Это способ подменять this без вызова функции
     this – объект, который вы передаете

      var a = function () {
          console.log(this);
      };

      var b = a.bind({});
      b(); // {}




                       http://es5.github.com/#x15.3.4.5
33                MDN Function#bind http://clck.ru/2EeTx
Вызов функции: arguments


 Передача значения
 arguments
Передача значения в функцию



     •  Значения передаются по ссылке
     •  Можно менять «поля» переданного объекта
     •  Примитив менять нельзя
     •  Можно переписать ссылку без потери
        объекта



35
arguments


     •  Как и this появляется при вызове
     •  Это не Array
     •  Содержит список всех аргументов
      –  arguments[0]…

     •  Содержит ссылку на вызывающий конекст
      –  arguments.caller
      –  Deprecated!

     •  Содержит ссылку на себя
      –  arguments.calle



36                          http://es5.github.com/#x10.6
Прототипное наследование


  prototype и __proto__,
  Цепочка прототипов,
  Оператор instanceof
prototype и __proto__




     •  prototype – свойство функции
      –  Оно есть у функции с рождения
      –  По умолчанию это пустой объект

     •  __proto__ – ссылка на prototype у объекта
      –  Во многих движках JavaScript оно скрыто
      –  Определяется во время работы оператора new




                            http://es5.github.com/#x15.3.5.2
38
                                http://es5.github.com/#x8.6.2
Цепочка прототипов
     var Foo = function () {
         this.b = 146; // Собственное свойство
     };

     Foo.prototype.bar = function () {
         console.log(this);
     };

     Foo.prototype.a = 123;

     var foo = new Foo();

     foo.bar();   //   foo
     foo.a;       //   123
     foo['b'];    //   146
     foo.c;       //   undefined

     Foo.prototype.c = 8;
     foo.c;     // 8 <- Magic???
39
Цепочка прототипов
       foo
       b         146
       __proto__ object


                 Foo.prototype
                 bar        function
                 a          123
                 __proto__ object


                                 Object.prototype
                                 __proto__ null

40
                          http://es5.github.com/#x4.2.1
Оператор . и []



     •  Выполняет поиск свойства
     •  Использует цепочку прототипов
     •  Ищет в собственных свойствах
     •  Затем рекурсивно по ссылке __proto__
     •  Если __proto__ null – возвратит undefined



41                     http://es5.github.com/#x11.2.1
Оператор instanceof


     var Foo = function () {
         this.b = 146;
     };

     var foo = new Foo();

     foo instanceof Foo;       // true
     foo instanceof Object;    // true <- Магия??
     foo instanceof Array;     // false




42                            http://es5.github.com/#x11.8.6
Оператор instanceof




     •  Использует цепочку прототипов
     •  Рекурсивно ищет __proto__ === prototype




43
Цепочка прототипов
       foo
       b         146
       __proto__ object


                 Foo.prototype
                 bar        function
                 a          123
                 __proto__ object


                                 Object.prototype
                                 __proto__ null

44
Оператор new


На самоподготовку
- Напишите функцию эмулирующую оператор
new




              http://es5.github.com/#x11.2.2
Strict Mode


На самоподготовку
- выделите отличия от обычного режима
- всегда ли стоит применять Strict Mode?
- в каком месте кода стоит объявлять SM?


              http://es5.github.com/#x10.1.1
Annotated ECMAScript 5.1




   http://es5.github.com/
Mozilla Developer Network




https://developer.mozilla.org/en-US/
Основы и заблуждения насчет JavaScript




      http://habrahabr.ru/post/120193/
Михаил Давыдов

     Разработчик JavaScript




     azproduction@yandex-team.ru
     azproduction




Спасибо

Contenu connexe

Tendances

Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stlmcroitor
 
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)Mikhail Davydov
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoDenis Khabrenko
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 

Tendances (20)

Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
Lecture 8
Lecture 8Lecture 8
Lecture 8
 
Lecture 5
Lecture 5Lecture 5
Lecture 5
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenko
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 

En vedette

Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
 
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"Evangelos Kanoulas "Advances in Information Retrieval Evaluation"
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"Yandex
 
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"Yandex
 
Диалог_с_клиентом_на_его_территории
Диалог_с_клиентом_на_его_территорииДиалог_с_клиентом_на_его_территории
Диалог_с_клиентом_на_его_территорииYandex
 
Julia Stoyanovich "Making interval-based clustering rank-aware"
Julia Stoyanovich "Making interval-based clustering rank-aware"Julia Stoyanovich "Making interval-based clustering rank-aware"
Julia Stoyanovich "Making interval-based clustering rank-aware"Yandex
 
Михаил Корепанов — Profiler: Профилирование кода
Михаил Корепанов — Profiler: Профилирование кодаМихаил Корепанов — Profiler: Профилирование кода
Михаил Корепанов — Profiler: Профилирование кодаYandex
 
Ulrik Egede "Distributed analysis in LHCb"
Ulrik Egede "Distributed analysis in LHCb"Ulrik Egede "Distributed analysis in LHCb"
Ulrik Egede "Distributed analysis in LHCb"Yandex
 
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...Yandex
 
Федор Вирин "Особенности создания репрезентативных опросов в интернете"
Федор Вирин "Особенности создания репрезентативных опросов в интернете"Федор Вирин "Особенности создания репрезентативных опросов в интернете"
Федор Вирин "Особенности создания репрезентативных опросов в интернете"Yandex
 
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"Yandex
 
К.В. Воронцов "Регрессивный анализ и метод главных компонент"
К.В. Воронцов "Регрессивный анализ и метод главных компонент"К.В. Воронцов "Регрессивный анализ и метод главных компонент"
К.В. Воронцов "Регрессивный анализ и метод главных компонент"Yandex
 
К.В. Воронцов "Нейронные сети (продолжение)"
К.В. Воронцов "Нейронные сети (продолжение)"К.В. Воронцов "Нейронные сети (продолжение)"
К.В. Воронцов "Нейронные сети (продолжение)"Yandex
 
Роман Комаров "Сложная вёрстка в примерах"
Роман Комаров "Сложная вёрстка в примерах"Роман Комаров "Сложная вёрстка в примерах"
Роман Комаров "Сложная вёрстка в примерах"Yandex
 
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"Yandex
 
Mensagem para 2012.pptx
Mensagem para 2012.pptxMensagem para 2012.pptx
Mensagem para 2012.pptxdanialmeida
 
Presentació
PresentacióPresentació
Presentacióarilogar
 
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014Confederação Nacional da Indústria
 
Galeria de imagenes
Galeria de imagenes Galeria de imagenes
Galeria de imagenes yazz78
 
Somos Mayores
Somos MayoresSomos Mayores
Somos MayoresEartquake
 

En vedette (20)

Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"Evangelos Kanoulas "Advances in Information Retrieval Evaluation"
Evangelos Kanoulas "Advances in Information Retrieval Evaluation"
 
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"
Вера Лейзерович, Тигран Худавердян "Что такое виджеты и как это выглядит?"
 
Диалог_с_клиентом_на_его_территории
Диалог_с_клиентом_на_его_территорииДиалог_с_клиентом_на_его_территории
Диалог_с_клиентом_на_его_территории
 
Julia Stoyanovich "Making interval-based clustering rank-aware"
Julia Stoyanovich "Making interval-based clustering rank-aware"Julia Stoyanovich "Making interval-based clustering rank-aware"
Julia Stoyanovich "Making interval-based clustering rank-aware"
 
Михаил Корепанов — Profiler: Профилирование кода
Михаил Корепанов — Profiler: Профилирование кодаМихаил Корепанов — Profiler: Профилирование кода
Михаил Корепанов — Profiler: Профилирование кода
 
Ulrik Egede "Distributed analysis in LHCb"
Ulrik Egede "Distributed analysis in LHCb"Ulrik Egede "Distributed analysis in LHCb"
Ulrik Egede "Distributed analysis in LHCb"
 
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...
Ирина Томилова "Чего хотят тестировщики? или как после планирования жить хоро...
 
Федор Вирин "Особенности создания репрезентативных опросов в интернете"
Федор Вирин "Особенности создания репрезентативных опросов в интернете"Федор Вирин "Особенности создания репрезентативных опросов в интернете"
Федор Вирин "Особенности создания репрезентативных опросов в интернете"
 
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"
Евгений Бордунов "Веб-виджеты Яндекса и с чем их едят"
 
К.В. Воронцов "Регрессивный анализ и метод главных компонент"
К.В. Воронцов "Регрессивный анализ и метод главных компонент"К.В. Воронцов "Регрессивный анализ и метод главных компонент"
К.В. Воронцов "Регрессивный анализ и метод главных компонент"
 
К.В. Воронцов "Нейронные сети (продолжение)"
К.В. Воронцов "Нейронные сети (продолжение)"К.В. Воронцов "Нейронные сети (продолжение)"
К.В. Воронцов "Нейронные сети (продолжение)"
 
Роман Комаров "Сложная вёрстка в примерах"
Роман Комаров "Сложная вёрстка в примерах"Роман Комаров "Сложная вёрстка в примерах"
Роман Комаров "Сложная вёрстка в примерах"
 
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
 
Mensagem para 2012.pptx
Mensagem para 2012.pptxMensagem para 2012.pptx
Mensagem para 2012.pptx
 
Presentació
PresentacióPresentació
Presentació
 
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014
Pesquisa sobre Resíduos Sólidos | Junho/Julho 2014 | Divulgação 20/08/2014
 
Rádio Capital
Rádio CapitalRádio Capital
Rádio Capital
 
Galeria de imagenes
Galeria de imagenes Galeria de imagenes
Galeria de imagenes
 
Somos Mayores
Somos MayoresSomos Mayores
Somos Mayores
 

Similaire à Михаил Давыдов — JavaScript: Базовые знания

Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxYandex
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)Mikhail Davydov
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirCodeFest
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf Conference
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grailsguest32215a
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)Alex Filatov
 

Similaire à Михаил Давыдов — JavaScript: Базовые знания (20)

Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
 
Bytecode
BytecodeBytecode
Bytecode
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
 

Plus de Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Plus de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Михаил Давыдов — JavaScript: Базовые знания

  • 1.
  • 3. Базовый синтаксис Expression (Выражение, Оператор), Statement (Блочное выражение, Блок)
  • 4. Statement •  Блочное выражение –  if (){}, try{}catch(e){}, function a(){} •  Директива интерпретатору –  return, throw, break, continue, var, … •  Может включать другие блочные выражения •  Может включать выражения •  Не возвращает значение •  Не может быть аргументом Expression •  Можно сделать из Expression – Expression; 4 http://es5.github.com/#x12
  • 5. Expression •  Оператор –  С одним аргументом typeof, !, (), ++, --, new, +,… –  С двумя ==, ===, >, <, instanceof, +, -,… –  С тремя a?b:c,… –  Вызов функции –  Оператор запятая •  Может включать другие операторы •  Не может включать Statement •  Возвращает значение •  Может быть в составе Statement 5 http://es5.github.com/#x11
  • 7. Приведение типов •  Зависит от оператора –  Оператор имеет определенный алгоритм •  Зависит от типа аргументов и мест •  Внутренние функции JavaScript –  ToNumber, ToString, ToBoolean, ToObject 7
  • 8. Пример: оператор + и примитивы Сильно перегружен: сложение чисел, конкатенация строк “2” + 3; // “23” 2 + 3; // 5 // Что происходит в внутренностях JavaScript: if (Type(“2”) === “String” || Type(3) === “String”) { return Concat(ToString(“2”), ToString(3)); } else { return ToNumber(2) + ToNumber(3); } 8 http://es5.github.com/#x11.6.1
  • 9. Что если один из операндов – Object? 9
  • 10. Пример: оператор + объект Применяется тот же алгоритм Вся «магия» в ToString({}) “2” + {}; // ”2[object Object]” Concat(ToString(“2”), ToString({})); ToString({}) -> ToPrimitive({}, “String”) ToPrimitive({}, “String”) -> ({}).[[DefaultValue]](“String”) if (IsCallable({}.toString)) { return ({}).toString(); } else if (IsCallable({}.valueOf)) { return ({}). valueOf(); } else { throw new TypeError(); } 10 http://es5.github.com/#x8.12.8
  • 12. Операторы == и === The Abstract Equality Comparison Algorithm http://es5.github.com/#x11.9.3 '' == '0' // false 0 == '' // true 0 == '0' // true false == undefined // false false == null // false null == undefined // true The Strict Equality Comparison Algorithm http://es5.github.com/#x11.9.6 '' === '0' // false! 0 === '' // false! 0 === '0' // false! false === undefined // false! false === null // false! null === undefined // false! +0 === -0 // true! 12
  • 13. Оператор typeof Алгоритм - Ссылка не достижима (IsUnresolvableReference) – возвращаем "undefined" - Иначе смотрим по таблице Type(val) Результат Undefined "undefined" Null "object" Boolean "boolean" Number "number" String "string" Object (нативный и не имеет [[Call]]) "object" Object (нативный или не нативный и "function” имеет [[Call]]) Object (не нативный и не имеет [[Call]]) Не "undefined", "boolean", "number", "string" 13 http://es5.github.com/#x11.4.3
  • 14. WAT? •  [1] > 0; // ? •  [1,1] > 0; // ? •  [1,] > 0; // ? •  [1,,] > 0; // ? •  [1] > "0"; // ? 14
  • 15. WAT? •  [1] > 0; // true •  [1,1] > 0; // false •  [1,] > 0; // true •  [1,,] > 0; // false •  [1] > "0"; // ? 15
  • 16. Функции Function Declaration, Conditional Function Declaration, Function Expression, Named Function Expression, IEFE
  • 17. На самом деле Function в JavaScript – это Object со скрытым полем [[Call]] 17 http://es5.github.com/#x13.2
  • 18. Function Declaration/Definition - Это Statement - Инициализируется во время входа в контекст - Объявляется в блоке функции или в глобальном блоке a(); // OK function a() { b(); // OK function b() { } } a(); 18 http://es5.github.com/#x13
  • 19. Conditional Function Declaration - Это тоже Statement - Инициализируется во время входа в контекст или в рантайме - По стандарту такая запись недопустима if (true) { function a() { return 1; } } else { function a() { return 2; } } a(); // Firefox – 1, Others - 2 19
  • 20. CFD+Strict Mode - При использовании строгого режима возникнет ошибка SyntaxError "use strict"; if (true) { function a() { return 1; } } else { function a() { return 2; } } // SyntaxError // Function Expression! 20
  • 21. Function Expression - Это expression - Инициализируется в рантайме - Объявляется где угодно a(); // error var a = function () { b(); // error var b = function () { }; b(); // ok }; a(); // ok 21 http://es5.github.com/#x11.2.5
  • 22. Named Function Expression - Это тот же Function Expression - Можно обратиться к себе по своему имени - Имя доступно только в своем блоке (кроме старых IE) (function timer() { setTimeout(timer, 1000); console.log(+new Date); }()); typeof timer; // undefined, Old IE - function 22
  • 23. IEFE - Это тот же Function Expression -  Мы даем понять интерпретатору, что этот код - Function Expression -  IEFE позволяет эмулировать блочную область видимости function (){}(); // SyntaxError !function (){}(); // OK +function (){}(); // OK *function (){}(); // OK (function (){}()); // OK [function (){}()]; // OK var a = function (){}(); var a = (function (){}()); // The best 23
  • 24. Область видимости Определяется во время создания функции Не меняется при передаче функции Образует цепочку областей видимости Лексическая Образует «замыкание»
  • 25. Область видимости var a = 1; function foo() { var c = 2; function bar(e) { return a + c + e; } return bar(3); } foo(); // 6 http://es5.github.com/#x10.3 25 http://es5.github.com/#x10.2
  • 26. Цепочка областей видимости GLOBAL a 1 foo func(on foo c 2 bar func(on bar e argument 26
  • 27. Вызов функции и this this – основная грабля в JavaScript Прямой вызов Вызов через c оператором точка и [] Вызов через new Вызов через call, apply, bind
  • 28. This в JavaScript определяется во время вызова функции! 28 http://es5.github.com/#x11.2.3
  • 29. Прямой вызов – через оператор () () – это оператор вызова функции this всегда undefined но он трансформируется в global В строгом режиме всегда undefined (трансформации нет) function a() { console.log(this); } a(); // window (undefined -> window) function b() { “use strict”; console.log(this); } b(); // undefined 29
  • 30. Оператор . и [] Это Expression this – объект от которого был получена эта функция var foo = { bar: function () { console.log(this); } }; foo.bar(); // foo var baz = {}; baz.bar = foo.bar; baz.bar(); // baz var fooBar = foo.bar; fooBar(); // ??? 30 http://es5.github.com/#x11.2.1
  • 31. Оператор new Это Expression new – это еще один способ вызова функции Каждая функция может быть конструктором this – пустой объект со ссылкой на prototype вызываемой функции var A = function () { console.log(this); console.log(this.__proto__ === A.prototype); }; new A(); // Object, true 31 http://es5.github.com/#x11.2.2
  • 32. Call, apply Это способ управлять значением this this – объект, который вы передаете var a = function (a, b) { console.log(this, a, b); }; a.call([]); // [], undefined, undefined a.call([], 1, 2); // [], 1, 2 a.apply([], [1, 2]); // [], 1, 2 http://es5.github.com/#x15.3.4.4 32 http://es5.github.com/#x15.3.4.3
  • 33. Bind Это способ подменять this без вызова функции this – объект, который вы передаете var a = function () { console.log(this); }; var b = a.bind({}); b(); // {} http://es5.github.com/#x15.3.4.5 33 MDN Function#bind http://clck.ru/2EeTx
  • 34. Вызов функции: arguments Передача значения arguments
  • 35. Передача значения в функцию •  Значения передаются по ссылке •  Можно менять «поля» переданного объекта •  Примитив менять нельзя •  Можно переписать ссылку без потери объекта 35
  • 36. arguments •  Как и this появляется при вызове •  Это не Array •  Содержит список всех аргументов –  arguments[0]… •  Содержит ссылку на вызывающий конекст –  arguments.caller –  Deprecated! •  Содержит ссылку на себя –  arguments.calle 36 http://es5.github.com/#x10.6
  • 37. Прототипное наследование prototype и __proto__, Цепочка прототипов, Оператор instanceof
  • 38. prototype и __proto__ •  prototype – свойство функции –  Оно есть у функции с рождения –  По умолчанию это пустой объект •  __proto__ – ссылка на prototype у объекта –  Во многих движках JavaScript оно скрыто –  Определяется во время работы оператора new http://es5.github.com/#x15.3.5.2 38 http://es5.github.com/#x8.6.2
  • 39. Цепочка прототипов var Foo = function () { this.b = 146; // Собственное свойство }; Foo.prototype.bar = function () { console.log(this); }; Foo.prototype.a = 123; var foo = new Foo(); foo.bar(); // foo foo.a; // 123 foo['b']; // 146 foo.c; // undefined Foo.prototype.c = 8; foo.c; // 8 <- Magic??? 39
  • 40. Цепочка прототипов foo b 146 __proto__ object Foo.prototype bar function a 123 __proto__ object Object.prototype __proto__ null 40 http://es5.github.com/#x4.2.1
  • 41. Оператор . и [] •  Выполняет поиск свойства •  Использует цепочку прототипов •  Ищет в собственных свойствах •  Затем рекурсивно по ссылке __proto__ •  Если __proto__ null – возвратит undefined 41 http://es5.github.com/#x11.2.1
  • 42. Оператор instanceof var Foo = function () { this.b = 146; }; var foo = new Foo(); foo instanceof Foo; // true foo instanceof Object; // true <- Магия?? foo instanceof Array; // false 42 http://es5.github.com/#x11.8.6
  • 43. Оператор instanceof •  Использует цепочку прототипов •  Рекурсивно ищет __proto__ === prototype 43
  • 44. Цепочка прототипов foo b 146 __proto__ object Foo.prototype bar function a 123 __proto__ object Object.prototype __proto__ null 44
  • 45. Оператор new На самоподготовку - Напишите функцию эмулирующую оператор new http://es5.github.com/#x11.2.2
  • 46. Strict Mode На самоподготовку - выделите отличия от обычного режима - всегда ли стоит применять Strict Mode? - в каком месте кода стоит объявлять SM? http://es5.github.com/#x10.1.1
  • 47. Annotated ECMAScript 5.1 http://es5.github.com/
  • 49. Основы и заблуждения насчет JavaScript http://habrahabr.ru/post/120193/
  • 50. Михаил Давыдов Разработчик JavaScript azproduction@yandex-team.ru azproduction Спасибо