Ответы на вопросы на собеседование Основы JavaScript (часть 1).

  • Как переадресовать страницу в JavaScript?


  • Сколько параметров можно передать функции?

Сколько угодно.

  • Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать?

Так:  
Или так:

  • Чем отличается наследование в JavaScript от наследования в PHP?

В отличие от PHP, где наследование можно делать одним способом, в JavaScript таких способов много. На уровне языка реализовано наследование на прототипах.
В JavaScript каждый объект может иметь ассоциацию с другим объектом - так называемый "прототип" (prototype). В случае, если поиск некоторого свойства (или метода) в исходном объекте заканчивается неудачно, интерпретатор пытается найти одноименное свойство (метод) в его прототипе, затем - в прототипе прототипа и т. д. К примеру, если мы затребовали обращение к obj.prop (или, что абсолютно то же самое, obj['prop']), JavaScript начнет искать свойство prop в самом объекте obj, затем – в прототипе obj, прототипе прототипа obj, и так до конца.

  • Приведи пример наследования в JavaScript.

Например, пусть объект "cat" наследуется от объекта "animal". В наследовании на прототипах это реализуется как ссылка
Или вот чуть более развернутый пример. MyType наследуется от Obj:

  • Пара слов об объектах в JavaScript?

Объекты (они же - ассоциативные массивы, хэши) и работа с ними в JavaScript реализованы не так, как в большинстве языков. Объект в JavaScript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.

  • Что представляет из себя метод объекта в JavaScript?

Метод объекта в JavaScript - это просто функция, которая добавлена в ассоциативный массив.

  • Зачем в JavaScript перед переменной писать var?

Если создавать переменную через обычное присваивание - будет создана "глобальная переменная". Пример:
Если создавать переменную с использованием слова var, тогда будет создана "локальная переменная", которая перестаёт существовать после завершения работы функции. Пример:

  • Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b }. Есть ли между ними разница? Если есть то какая?

Есть, разница в видимости функции. Вариант функции без var виден везде в текущей области видимости. В том числе и до самого определения функции. Вариант с var присваивает функцию переменной, поэтому такая функция видна только после определения.

  • Как создать массив в JavaScript?

Вот несколько способов.

  • Можно ли в JavaScript использовать функцию в качестве конструктора?

Вот так:

  • Сколько и какие конструкции для циклов есть в JavaScript?

Три: for, while и do...while.

  • Что cделает код: break mark; ?

Выйдет из текущего блока цикла или switch на метку "mark".

  • Можно ли задать массив таким образом: var a = "a,b".split(',')?

Да, можно.

  • Что выведет alert(typeof null); ?

Выведет сообщение "object".

  • А это: alert(null instanceof Object); ?

Выведет сообщение "false".

  • 0.1 + 0.2 == 0.3 ?

Нет, т.к. вычисленное значение будет равно 0.30000000000000004. Это действие точности вычислений и проявляется она не только в JavaScript.

  • Что выведет alert(typeof NaN); ?

"Number"

  • Что выведет alert(NaN === NaN); ?

"false"

  • В чём различие свойств innerHTML и outerHTML?

Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново.
outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента.
Также, важно отметить, что innerHTML поддерживается всеми современными браузерами, а outerHTML поддерживается в IE (с некоторыми отличиями от остальных браузеров), в последних версиях Opera, и в браузерах на основе последних WebKit (Safari, Chrome), но не поддерживается в Firefox.
Для кода:
innerHTML возвратит:
outerHTML возвратит:

  • Какая разница между операторами == и ===?

Оператор == сравнивает на равенство, а вот === сравнивает на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу. Именно из-за этого он обычно и используется.

  • В чем разница между Object.getOwnPropertyNames() и Object.keys()?

Object.getOwnPropertyNames() возвращает перечислимые и не перечислимые свойства из объекта или массива.
Object.keys() возвращает перечислимые свойства из объекта или массива.

  • С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки?

Это возможно с помощью конструкции try{}... catch{}

  • Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку?

Функция а() инициализируется на этапе загрузки скрипта, как бы "всплывает вверх" а функция б инициализируется, когда объявляется переменная b

  • Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?

Глобальная переменная - переменная, которая доступна (видима) во всем документе, в отличии от локальной (ограничена рамками блока программного кода, внутри которого она определена)
Большинство JavaScript разработчиков избегает использования глобальных переменных. Одна из причин - возможный конфликт имен глобальных и локальных переменных. Так же код использующий глобальные переменные может быть тяжелее сопровождать и тестировать.

  • Что такое замыкания (closure) в JavaScript?

Простыми словами это внутренняя функция, т.е. функция в функции.
Замыканием (closure) называют потому, что после выполнения родительской или внешней функции, код внутренней все еще "живет" в интерпретаторе, и его можно выполнить. Ошибок не возникнет даже если внутренняя функция (замыкание) будет использовать переменные из внешней функции. Например, эту особенность можно использовать для создания функций обработчиков событий:


  • Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки).


  • Что вернет выражение +new Date()? Чем отличается от Date.now().

Ответ в том, что +new Date(); создаст экземпляр объекта Date и благодаря + переведет его в числовой формат. Во втором случае вызовется статический метод конструктора, который является более приоритетным, т.к. во-первых он не требует создания экземпляра, а во-вторых является более понятным.

  • Какое значение возвращает данное предложение ~~3.14?

Ответ: 3

  • Какое значение возвращает данное предложение?

"i'm a lasagna hog".split("").reverse().join("");
Ответ: "goh angasal a m’i"

  • Что покажут эти два alert?

Ответ: "Hello World" и ReferenceError: bar is not defined

  • Чему равно foo.length?

Ответ: 2

  • Что такое prototype в javascript?

В общих чертах prototype - это свойство позволяющее добавлять уже существующим объектам свойства, также используется для эмуляции наследования классов в JavaScript. Подробный ответ написан здесь . Еще как вариант, можно упомянуть о Prototype.js. Это популярная библиотека добавляющая удобные ООП возможности в программы на JavaScript-е.

  • Какие способы навешивания обработчиков событий вы знаете ?

События можно добавлять тремя способами: 
  • htmlElement.onclick = function(event) { .... } - так можно добавить только один обработчик 
  • htmlElement.addEventListener( "click", ... ) - так можно навесить несколько обработчиков, сохраняет порядок обработчиков 
  • htmlElement.attachEvent( "on"+имя_события, обработчик) - тоже можно навесить несколько, не сохраняет порядок обработчиков, нет доступа к элементу на котором сработало событие.

Основы JavaScript (часть 2).

Рассказать друзьям:

10 коментарі :

  1. Это полный капец

    ОтветитьУдалить
  2. пишите без ошибок код , setTimeout(alert("Hello",3000);

    ОтветитьУдалить
    Ответы
    1. Ошибка у Вас. Во-первых, не закрыли скобку, будет синтаксическая ошибка при выполнении. Во-вторых, ошибка в логике. setTimeout - принимает 1м параметром либо функцию либо строку с кодом функции, в Вашем случае передаете в setTimeout - undefined(результат выполнения alert, который к тому же выполнится сразу же, а не через таймаут).

      Удалить
    2. В примере точно ошибка, нельзя так вызывать функцию. Вообще есть более изящный вариант для этого – setTimeout(alert, 3000, 'Hello');

      Удалить
  3. Спасибо за такой мануал!

    ОтветитьУдалить
  4. на последней версии хрома на mac os скролл страницы не работает

    ОтветитьУдалить
  5. Автор полуграмотный, после 3 вопроса даже читать не стал все остальное. Не рекомендую.

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. attachEvent работает только в старых версиях Internet Explorer. Плюс не указан способ добавления обработчика через атрибут HTML.

    ОтветитьУдалить