JAVASCRIPT ИНТЕРВЬЮ ВОПРОСЫ

Оригинал: JavaScript Interview Questions

Я просматривал мой список о ‘RSS каналы в этот вечер – Да, я один из тех людей, которые до сих пор читают RSS – и наткнулся на список вопросов для интервью JavaScript вывешенные Джеймс Падолсей. Это напомнило мне, что у меня было несколько вопросов спрятан от того, когда я связался с Meebo рекрутера несколько лет назад.

Я не претендую на работу, потому что я работал на (ныне несуществующей) автозагрузки Viewzi, и я не хочу, чтобы искоренить из Далласа и переехать в Калифорнию. Просто для ударов, я спросил рекрутер, если все будет в порядке, если я пошел вперед и попытался мою руку на их вопросы кода в любом случае.После чего, рекрутер ответил:

Вы Aced в Puzzlers, молодцы! Вы уверены, что вы не хотите, чтобы быть рассмотрены для нашей JavaScript / Front-End Developer позиции? Если вы когда-нибудь зуд, чтобы перейти к CA, убедитесь, что, дайте мне знать!

Так, несколько лет прошло с тех пор, я надеюсь, что это кошерное для меня поделиться на эти вопросы, наряду с ответами Я предоставляемых …


1. Когда делает div.setAttribute('###') не равно div.###

Ответ:

Когда вы пытаетесь установить элемента class атрибут, IE имеет проблемы. Поэтому, лучше использовать .className вместо .setAttribute() Существует также проблема с .setAttribute() и style в IE, так .style должны быть использованы.

// Don't do this:
el.setAttribute('class', 'foobar');

// Do this instead:
el.className = 'foobar';

// Don't do this:
el.setAttribute('style', 'color: #000');

// Do this instead:
el.style.color = '#000';

2. В чем разница между этими двумя утверждениями:

 var x = 3;

x = 3;

Ответ:

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


3. Какая разница между:

 !!(obj1 && obj2);

(obj1 && obj2);

Ответ:

Первый возвращает “настоящий” логическое значение, потому что вы сначала свести то, что находится внутри скобок, но тут же отрицать его снова. Таким образом, это, как говорят что-то “не, не” правда-у, что делает его true Второй пример просто проверяет для существования obj1 и obj2 но не обязательно возвращать “реальный” логическое значение, а не то, что возвращение является либо истина-ложь у или у-. Это может быть проблематичным, потому что ложно-у может быть число 0 или пустая строка, и т.д. Простая существование может быть правдой-й. А “реальный” логическое будет только true или false


4. Написать в одну строку кусок кода JavaScript, что объединяет все строк, передаваемых в функцию.(Примечание: форматирование добавлены для читабельности)

function concatenate() {
  return String.prototype.concat.apply('', arguments);
}

Подробнее об этом здесь …
http://sitepen.com/blog/2008/05/09/string-performance-an-analysis


5. Что означают эти два примера имеют общего?

Короткий ответ:

Оба создают потенциальные утечки памяти, особенно в Internet Explorer.

Пример 1:

var obj = document.getElementById('adiv');

document.getElementById('adiv').ptr = obj;

Долгий ответ:

Это плохая практика, потому что вы сначала назначить DOM элемент на переменную, а потом присвоить тот же элемент в собственности (несуществующего) самого элемента. Это создает своего рода круговой логики цикла, и негативно сказаться на производительности.

Пример 2:

 function assignClick() {
  var el = document.createElement('div');

  function handleClick() {
    el.innerHTML = 'clicked!';
  }

  el.attachEvent('onclick', handleClick);
}

Долгий ответ:

Этот пример будет работать только в Internet Explorer, потому что это использует собственность.attachEvent() метод. Конечно, .innerHTML Также фирменная (В настоящее время стандарт), но в отличие от .attachEvent() .innerHTML широко поддерживается во всех современных браузерах. Для того, чтобы этот пример более кросс-браузерный дружелюбный, стандарт W3C .addEventListener() необходимо сначала попытались, и если он не существует, то попробуйте .attachEvent() в качестве запасного варианта.