SlideShare a Scribd company logo
1 of 28
Download to read offline
JavaScript Intro
пожалуй начать стоит именно с этого
Немного истории (Brendan Eich)
JS был обязан «выглядеть как Java», только     Считайте, что JavaScript (пожалуйста, только
поменьше, быть эдаким младшим братом-          не «JScript») спас вас от VBScript.
тупицей для Java. Кроме того, он должен
был быть написан за 10 дней, а иначе мы бы
                                               Простите, времени было мало для того,
имели что-то похуже JS.
                                               чтобы сделать правильную оптимизацию
                                               хвостовой рекурсии. 10 дней почти без сна,
В то время мы должны были двигаться очень      чтобы сделать JS с чистого листа, заставить
быстро, т.к. знали, что Microsoft идет за      его «выглядеть как Java» (я сделал, чтобы он
нами.                                          выглядел как C), и тайком протащить туда
                                               его спасительные фишки: first class functions
                                               (замыкания сделал позже, но они были
10 дней на то, чтобы сделать лексер, парсер,
                                               частью плана сразу) и прототипы (примерно
компилятор в байткод (bytecode emitter),
                                               как в языке Self).
интерпретатор, встроенные классы и
декомпилятор. Помощь была только с
файлом jsdate.c — от Ken Smith из Netscape
(который, по нашему излишне
оптимистичному соглашению, склонировал
java.util.Date — Y2K баги и т.д. тупица...).
                                               I'll do better in the next life.
Еще чуть-чуть
«Самый неправильно понятый язык программирования в мире стал самым
популярным в мире языком программирования»
                                                   Дуглас Крокфорд

Первоначально язык назывался LiveScript и предназначался как для
программирования на стороне клиента, так и для программирования на
стороне сервера (там он должен был называться LiveWire).

На синтаксис оказали влияние языки Си и Java, и, поскольку Java в то
время было модным словом, 4 декабря 1995 года LiveScript
переименовали в JavaScript, получив соответствующую лицензию у Sun.
и еще..
Анонс JavaScript со стороны представителей Netscape и Sun состоялся
накануне выпуска второй бета-версии Netscape Navigator. В нём
декларируется, что 28 лидирующих ИТ-компаний выразили намерение
использовать в своих будущих продуктах JavaScript как объектный
скриптовый язык с открытым стандартом.

По инициативе компании Netscape была проведена стандартизация языка
ассоциацией ECMA. Стандартизированная версия имеет название
ECMAScript, описывается стандартом ECMA-262. Первой версии
спецификации соответствовал JavaScript версии 1.1, а также языки JScript
и ScriptEasy.
будет ли видна 'a' в коде исполняющемся в
контексте глобального объекта?

a)                        c)
a = 1;                    function(){
                                a = 1;
                          }
b)
var a = 1;
                          d)
                          var b = function (){
                                var a = 1;
                          }
будет ли видна 'a' в коде исполняющемся в
контексте глобального объекта?

a)                        c)
a = 1;                    function(){
Да.                             a = 1;
                          }
b)                        Да.
var a = 1;
Да.                       d)
                          var b = function (){
                                var a = 1;
                          }
                          Нет
что выведется в консоль?
a)                                      c)
function a(){                           var a = ( function(b){ return b; } )(“hello”);
      return “hello”;                   console.log(a);
}
console.log(a);
                                        d)
                                        var a = (function(b){ return b;})(“hello”);
b)                                      console.log( a() );
var a = function(){ return “hello” };
console.log(a());
что выведется в консоль?
a)                                           c)
function a(){                                var a = ( function(b){ return b; } )(“hello”);
      return “hello”;                        console.log(a);
}                                            Выведется “hello”
console.log(a);
Выведется код функции “a”. То же самое что   d)
и при вызрове a.toString();                  var a = (function(b){ return b;})(“hello”);
                                             console.log( a() );
b)                                           Вызовет ошибку string не функция.
var a = function(){ return “hello” };
console.log(a());
Выведется “hello”
что выведется в консоль при
вызове abc(); ?
var a = 234;
function abc(){
   console.log(typeof a);
   var a = ‘line’;
}
что выведется в консоль при
вызове abc(); ?
var a = 234;
function abc(){
   console.log(typeof a);
   var a = ‘line’;
}

Выведется undefined.
почему этот код не работает так
как от него “ожидают”?
function User(name) {
   this.name = name;
};

var j = User('Jack');
alert(j.name);



(ожидают что j отработает как конструктор)
почему этот код не работает так
как от него “ожидают”?
function User(name) {
   this.name = name;
};

var j = User('Jack');
alert(j.name);

Ожидают от него что в j окажется объектом
создаваемый контруктором User, но так как User вызван
без new, а User ничего не возвращает j будет
undefined, а обращение к j.name вызовет TypeError.
что выведет код? Почему?
Object.prototype.hello = {};
var a = [1,2,3];
for ( var number in a ) {
   alert( number );
}
что выведет код? Почему?
Object.prototype.hello = {};
var a = [1,2,3];
for ( var number in a ) {
   alert( number );
}

Код поочередно выведет четыре сообщения, в первом - 0, во втором - 1, в
третьем - 2 и в четвертом выведет hello. Это происходит потому что в
JavaScript массив это также объект, а for .. in выражение проходит по
всем свойствам объекта. Таким свойством является и hello. В number у
нас помещаются названия свойств при обходе объекта.
что выведет код? Почему?
(function() {
      var pack = 'Jack';
 })();
 alert(typeof pack);
что выведет код? Почему?
(function() {
      var pack = 'Jack';
 })();
 alert(typeof pack);

Выведет undefined, т.к. pack не определен, т.к.
определение pack происходит локально, и никак не
влияет на глобальный объект, в контексте которого мы
вызываем alert();
что выведет код? Почему?
function SuperConstructor() {
   this.x = 20;
   this.getX = function() { return this.x; }
}
var a = new SuperConstructor();
var f = a.getX;
console.log(f());
что выведет код? Почему?
function SuperConstructor() {
   this.x = 20;
   this.getX = function() { return this.x; }
}
var a = new SuperConstructor();
var f = a.getX;
console.log(f());

f выполняется в глобальном контексте, а не контексте объекта созданного конструктором
SuperConstructor, но f это ссылка на a.getX, поэтому вернет this.x, что тоже самое что и f.x,
который undefined.
а этот?
x = 5;
function SuperConstructor() {
   this.x = 20;
   this.getX = function() { return this.x; }
}
var a = new SuperConstructor();
var f = a.getX;
console.log(f());
что выведет код? Почему?
x=[];
for (var i = 0; i < 3; ++i) {
   var j = i;
   x.push(function () { return j; });
}
console.log(x[0](), x[1](), x[2]());
что выведет код? Почему?
x=[];
for (var i = 0; i < 3; ++i) {
   var j = i;
   x.push(function () { return j; });
}
console.log(x[0](), x[1](), x[2]());

В x будет три элемента, все они будут функциями
возвращающими 2, т.к. вызываются они в когда j = 2
что делать?
x = [];
for (var i = 0; i < 3; ++i){
   (function (new_i) {
      x.push(function () { return new_i; });
   })(i);
}
что делать?
x = [];
for (var i = 0; i < 3; ++i){
   (function (new_i) {
      x.push(function () { return new_i; });
   })(i);
}
т.о. в x будет три функции каждая из
которых будет возвращать свой индекс в x.
что выведет код? Почему?
for(var i=0;i<5;i++) {
   setTimeout(function(){
      alert(i);
   }, 0);
}
что выведет код? Почему?
for(var i=0;i<5;i++) {
   setTimeout(function(){
      alert(i);
   }, 0);
}

JavaScript-код исполняется в одном потоке (event loop, UI thread).
setTimeout, откладывает выполнение функции на 0 мс. НО. Событие
таймаута произойдет только тогда, когда основной поток освободится -
цикл пройдет полностью. Код выведет 5 пятёрок. Почему пятёрок? :)
где применим JavaScript?
На сервере




На клиенте
Что будет дальше с JavaScript?
Новые спецификации языка - новые языковые
структуры (ES6)

Новые спецификации от W3C - новые возможности
(HTML5, Canvas, Video, WebIntents, WebWorkers,
WebSockets , WebDriver, WebAudio, WebGL, Notifications
API etc)

Новые продукты - большее распространение, новые
возможности
Спасибо.


Дальше - вопросы и
определение тем будущих
митапов - больше :)
оптимизация, поддержка, новьё etc




                    rudevich@gmail.com, skype:arudevich

More Related Content

What's hot

Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x IntroductionFedor Vompe
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLRMikhail Shcherbakov
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoDenis Khabrenko
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеPython Meetup
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 

What's hot (20)

Python и Cython
Python и CythonPython и Cython
Python и Cython
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Clojure #1
Clojure #1Clojure #1
Clojure #1
 
Clojure #2 (2014)
Clojure #2 (2014)Clojure #2 (2014)
Clojure #2 (2014)
 
Component Inspector
Component InspectorComponent Inspector
Component Inspector
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLR
 
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenkoEcma script 6 yevhen diachenko
Ecma script 6 yevhen diachenko
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 

Similar to JavaScript Intro

Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
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
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)Alex Filatov
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Yauheni Akhotnikau
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 

Similar to JavaScript Intro (20)

ФИЛП
ФИЛПФИЛП
ФИЛП
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
course js day 1
course js day 1course js day 1
course js day 1
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
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, Трухин Юрий
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 

JavaScript Intro

  • 1. JavaScript Intro пожалуй начать стоит именно с этого
  • 2. Немного истории (Brendan Eich) JS был обязан «выглядеть как Java», только Считайте, что JavaScript (пожалуйста, только поменьше, быть эдаким младшим братом- не «JScript») спас вас от VBScript. тупицей для Java. Кроме того, он должен был быть написан за 10 дней, а иначе мы бы Простите, времени было мало для того, имели что-то похуже JS. чтобы сделать правильную оптимизацию хвостовой рекурсии. 10 дней почти без сна, В то время мы должны были двигаться очень чтобы сделать JS с чистого листа, заставить быстро, т.к. знали, что Microsoft идет за его «выглядеть как Java» (я сделал, чтобы он нами. выглядел как C), и тайком протащить туда его спасительные фишки: first class functions (замыкания сделал позже, но они были 10 дней на то, чтобы сделать лексер, парсер, частью плана сразу) и прототипы (примерно компилятор в байткод (bytecode emitter), как в языке Self). интерпретатор, встроенные классы и декомпилятор. Помощь была только с файлом jsdate.c — от Ken Smith из Netscape (который, по нашему излишне оптимистичному соглашению, склонировал java.util.Date — Y2K баги и т.д. тупица...). I'll do better in the next life.
  • 3. Еще чуть-чуть «Самый неправильно понятый язык программирования в мире стал самым популярным в мире языком программирования» Дуглас Крокфорд Первоначально язык назывался LiveScript и предназначался как для программирования на стороне клиента, так и для программирования на стороне сервера (там он должен был называться LiveWire). На синтаксис оказали влияние языки Си и Java, и, поскольку Java в то время было модным словом, 4 декабря 1995 года LiveScript переименовали в JavaScript, получив соответствующую лицензию у Sun.
  • 4. и еще.. Анонс JavaScript со стороны представителей Netscape и Sun состоялся накануне выпуска второй бета-версии Netscape Navigator. В нём декларируется, что 28 лидирующих ИТ-компаний выразили намерение использовать в своих будущих продуктах JavaScript как объектный скриптовый язык с открытым стандартом. По инициативе компании Netscape была проведена стандартизация языка ассоциацией ECMA. Стандартизированная версия имеет название ECMAScript, описывается стандартом ECMA-262. Первой версии спецификации соответствовал JavaScript версии 1.1, а также языки JScript и ScriptEasy.
  • 5. будет ли видна 'a' в коде исполняющемся в контексте глобального объекта? a) c) a = 1; function(){ a = 1; } b) var a = 1; d) var b = function (){ var a = 1; }
  • 6. будет ли видна 'a' в коде исполняющемся в контексте глобального объекта? a) c) a = 1; function(){ Да. a = 1; } b) Да. var a = 1; Да. d) var b = function (){ var a = 1; } Нет
  • 7. что выведется в консоль? a) c) function a(){ var a = ( function(b){ return b; } )(“hello”); return “hello”; console.log(a); } console.log(a); d) var a = (function(b){ return b;})(“hello”); b) console.log( a() ); var a = function(){ return “hello” }; console.log(a());
  • 8. что выведется в консоль? a) c) function a(){ var a = ( function(b){ return b; } )(“hello”); return “hello”; console.log(a); } Выведется “hello” console.log(a); Выведется код функции “a”. То же самое что d) и при вызрове a.toString(); var a = (function(b){ return b;})(“hello”); console.log( a() ); b) Вызовет ошибку string не функция. var a = function(){ return “hello” }; console.log(a()); Выведется “hello”
  • 9. что выведется в консоль при вызове abc(); ? var a = 234; function abc(){ console.log(typeof a); var a = ‘line’; }
  • 10. что выведется в консоль при вызове abc(); ? var a = 234; function abc(){ console.log(typeof a); var a = ‘line’; } Выведется undefined.
  • 11. почему этот код не работает так как от него “ожидают”? function User(name) { this.name = name; }; var j = User('Jack'); alert(j.name); (ожидают что j отработает как конструктор)
  • 12. почему этот код не работает так как от него “ожидают”? function User(name) { this.name = name; }; var j = User('Jack'); alert(j.name); Ожидают от него что в j окажется объектом создаваемый контруктором User, но так как User вызван без new, а User ничего не возвращает j будет undefined, а обращение к j.name вызовет TypeError.
  • 13. что выведет код? Почему? Object.prototype.hello = {}; var a = [1,2,3]; for ( var number in a ) { alert( number ); }
  • 14. что выведет код? Почему? Object.prototype.hello = {}; var a = [1,2,3]; for ( var number in a ) { alert( number ); } Код поочередно выведет четыре сообщения, в первом - 0, во втором - 1, в третьем - 2 и в четвертом выведет hello. Это происходит потому что в JavaScript массив это также объект, а for .. in выражение проходит по всем свойствам объекта. Таким свойством является и hello. В number у нас помещаются названия свойств при обходе объекта.
  • 15. что выведет код? Почему? (function() { var pack = 'Jack'; })(); alert(typeof pack);
  • 16. что выведет код? Почему? (function() { var pack = 'Jack'; })(); alert(typeof pack); Выведет undefined, т.к. pack не определен, т.к. определение pack происходит локально, и никак не влияет на глобальный объект, в контексте которого мы вызываем alert();
  • 17. что выведет код? Почему? function SuperConstructor() { this.x = 20; this.getX = function() { return this.x; } } var a = new SuperConstructor(); var f = a.getX; console.log(f());
  • 18. что выведет код? Почему? function SuperConstructor() { this.x = 20; this.getX = function() { return this.x; } } var a = new SuperConstructor(); var f = a.getX; console.log(f()); f выполняется в глобальном контексте, а не контексте объекта созданного конструктором SuperConstructor, но f это ссылка на a.getX, поэтому вернет this.x, что тоже самое что и f.x, который undefined.
  • 19. а этот? x = 5; function SuperConstructor() { this.x = 20; this.getX = function() { return this.x; } } var a = new SuperConstructor(); var f = a.getX; console.log(f());
  • 20. что выведет код? Почему? x=[]; for (var i = 0; i < 3; ++i) { var j = i; x.push(function () { return j; }); } console.log(x[0](), x[1](), x[2]());
  • 21. что выведет код? Почему? x=[]; for (var i = 0; i < 3; ++i) { var j = i; x.push(function () { return j; }); } console.log(x[0](), x[1](), x[2]()); В x будет три элемента, все они будут функциями возвращающими 2, т.к. вызываются они в когда j = 2
  • 22. что делать? x = []; for (var i = 0; i < 3; ++i){ (function (new_i) { x.push(function () { return new_i; }); })(i); }
  • 23. что делать? x = []; for (var i = 0; i < 3; ++i){ (function (new_i) { x.push(function () { return new_i; }); })(i); } т.о. в x будет три функции каждая из которых будет возвращать свой индекс в x.
  • 24. что выведет код? Почему? for(var i=0;i<5;i++) { setTimeout(function(){ alert(i); }, 0); }
  • 25. что выведет код? Почему? for(var i=0;i<5;i++) { setTimeout(function(){ alert(i); }, 0); } JavaScript-код исполняется в одном потоке (event loop, UI thread). setTimeout, откладывает выполнение функции на 0 мс. НО. Событие таймаута произойдет только тогда, когда основной поток освободится - цикл пройдет полностью. Код выведет 5 пятёрок. Почему пятёрок? :)
  • 26. где применим JavaScript? На сервере На клиенте
  • 27. Что будет дальше с JavaScript? Новые спецификации языка - новые языковые структуры (ES6) Новые спецификации от W3C - новые возможности (HTML5, Canvas, Video, WebIntents, WebWorkers, WebSockets , WebDriver, WebAudio, WebGL, Notifications API etc) Новые продукты - большее распространение, новые возможности
  • 28. Спасибо. Дальше - вопросы и определение тем будущих митапов - больше :) оптимизация, поддержка, новьё etc rudevich@gmail.com, skype:arudevich