Викторина для тех, кто любит JavaScript больше ECMAScript. Главный приз: пирожок на полке.
Update: Пояснение. Для тех кто совсем не в теме. ECMAScript — это стандарт языка, на котором основаны реализации JavaScript в современных браузерах. Именно этот стандарт определяет поведение программ в этой статье. JavaScript является «надстройкой» над ECMAScript.
Пояснение номер 2. Глюки IE не имеют прямого отношения к викторине поскольку это ошибки (ну или «особенности») реализации стандартов.
* Вопросы:
Вопрос 1. Что выведет следующая программа?
Вопрос 2. Что выведет следующая программа?
Вопрос 3. Что выведет следующая программа?
Вопрос 4. Что выведет следующая программа?
Последний вопрос. Немного из другой области.
Вопрос 5. Как ускорить выполнение функции calc?
* Правильные ответы:
Ответ 1. «undefined»
Ответ 2. Сначала «7», затем ошибка.
Ответ 3. «undefined»
Ответ 4. «5»
Ответ 5.
* Правильные ответы с объяснением:
Ответ 1. «undefined»
При объявлении переменная помещается в область видимости, соответствующую функции, в которой она объявляется. Если переменная объявляется вне функций, она помещается в глобальную область видимости. Создание переменной происходит при получении управления функцией с её объявлением. Или программой, если переменная глобальна. При создании переменной в ECMAScript она приобретает значение undefined. Если переменная объявлена с инициализацией, инициализация происходит не в момент создания переменной, а при выполнении строки с инструкцией var.
Ответ 2. Сначала «7», затем ошибка.
Наиболее существенной разницей между заданием функции с использовании объявления (sum1) и заданием функции с помощью выражения (sum2) является то, что объявления осуществляются до выполнения кода, а выражение по мере его выполнения.
Ответ 3. «undefined»
Спецификация декларирует механизм автодополнения строк точками с запятой, приводящий к тому, что при наличии переноса строки инструкция до переноса может быть снабжена этим знаком. Здесь строка c «return» содержит допустимую языком инструкцию и, поскольку, далее следует перевод строки, срабатывает механизм автодополнения строк точками с запятой.
Ответ 4. «5»
Концевая запятая при задании массива отбрасывается без добавления к массиву пустого элемента.
Update для любящих IE. IE неправильно вставит пустой элемент в конец такого массива.
Ответ 5.
Для большинства реализаций JavaScript верны два соображения: доступ к локальным переменным осуществляется быстрее, цикл «for (var i = arguments.length; i--; )» содержит меньше инструкций, чем обычный.
* Ссылки:
ru.wikipedia.org/wiki/ECMAScript
Спасибо за внимание.
P.S. Убрал белый цвет текста. Тому, кто читает этот блог, он не нужен.
Спасибо за статью. /terloger/
Update: Пояснение. Для тех кто совсем не в теме. ECMAScript — это стандарт языка, на котором основаны реализации JavaScript в современных браузерах. Именно этот стандарт определяет поведение программ в этой статье. JavaScript является «надстройкой» над ECMAScript.
Пояснение номер 2. Глюки IE не имеют прямого отношения к викторине поскольку это ошибки (ну или «особенности») реализации стандартов.
* Вопросы:
Вопрос 1. Что выведет следующая программа?
var a = 123;
function foo() {
alert(typeof a);
var a = '123';
}
foo();
Вопрос 2. Что выведет следующая программа?
alert(sum1(3, 4));
alert(sum2(3, 4));
function sum1(a, b) { return a + b; }
var sum2 = function(a, b) { return a + b; }
Вопрос 3. Что выведет следующая программа?
function foo(){
return
{
code: 1
};
}
alert(foo());
Вопрос 4. Что выведет следующая программа?
alert([1,2,].length + [,1,2].length);
Последний вопрос. Немного из другой области.
Вопрос 5. Как ускорить выполнение функции calc?
var Multiplier = 123; // в объекте Global
function calc() { var s = 0; for (var i = 0; i < arguments.length; i++) s += Multiplier * arguments[i]; return s; }
* Правильные ответы:
Ответ 1. «undefined»
Ответ 2. Сначала «7», затем ошибка.
Ответ 3. «undefined»
Ответ 4. «5»
Ответ 5.
function calc() { var s = 0, m = Multiplier; for (var i = arguments.length; i--; ) s += m * arguments[i]; return s; }
* Правильные ответы с объяснением:
Ответ 1. «undefined»
При объявлении переменная помещается в область видимости, соответствующую функции, в которой она объявляется. Если переменная объявляется вне функций, она помещается в глобальную область видимости. Создание переменной происходит при получении управления функцией с её объявлением. Или программой, если переменная глобальна. При создании переменной в ECMAScript она приобретает значение undefined. Если переменная объявлена с инициализацией, инициализация происходит не в момент создания переменной, а при выполнении строки с инструкцией var.
Ответ 2. Сначала «7», затем ошибка.
Наиболее существенной разницей между заданием функции с использовании объявления (sum1) и заданием функции с помощью выражения (sum2) является то, что объявления осуществляются до выполнения кода, а выражение по мере его выполнения.
Ответ 3. «undefined»
Спецификация декларирует механизм автодополнения строк точками с запятой, приводящий к тому, что при наличии переноса строки инструкция до переноса может быть снабжена этим знаком. Здесь строка c «return» содержит допустимую языком инструкцию и, поскольку, далее следует перевод строки, срабатывает механизм автодополнения строк точками с запятой.
Ответ 4. «5»
Концевая запятая при задании массива отбрасывается без добавления к массиву пустого элемента.
Update для любящих IE. IE неправильно вставит пустой элемент в конец такого массива.
Ответ 5.
function calc() { var s = 0, m = Multiplier; for (var i = arguments.length; i--; ) s += m * arguments[i]; return s; }
Для большинства реализаций JavaScript верны два соображения: доступ к локальным переменным осуществляется быстрее, цикл «for (var i = arguments.length; i--; )» содержит меньше инструкций, чем обычный.
* Ссылки:
ru.wikipedia.org/wiki/ECMAScript
Спасибо за внимание.
P.S. Убрал белый цвет текста. Тому, кто читает этот блог, он не нужен.
Спасибо за статью. /terloger/