Оригінал: JavaScript Interview Questions Я переглядав мій список про ‘RSS канали в цей вечір – Так, я один з тих людей, які досі читають...

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

Я переглядав мій список про ‘RSS канали в цей вечір – Так, я один з тих людей, які досі читають RSS – і наткнувся на список питань для інтерв’ю JavaScript вивішені Джеймс Padolsey. Це нагадало мені, що у мене було кілька питань захований від того, коли я зв’язався з 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() в якості запасного варіанту.