JAVASCRIPT » История » Редакция 4
Редакция 3 (Александр Александров, 24.04.2019 16:31) → Редакция 4/5 (Александр Александров, 24.04.2019 22:39)
h1. JAVASCRIPT h2. Вопросы # Как переадресовать страницу в JavaScript? # Сколько параметров можно передать функции? # Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать? # Чем отличается наследование в JavaScript от наследования в PHP? # Приведи пример наследования в JavaScript. # Пара слов об объектах в JavaScript? # Что представляет из себя метод объекта в JavaScript? # Зачем в JavaScript перед переменной писать var? # Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b } Есть ли между ними разница? Если есть то какая? # Как создать массив в JavaScript? # Можно ли в JavaScript использовать функцию в качестве конструктора? # Сколько и какие конструкции для циклов есть в JAVASCRIPT? # Что cделает код: break mark; ? # Можно ли задать массив таким образом: var a = “a,b”.split(‘,’)? # Что выведет alert(typeof null); ? # Что выведет alert(null instanceof Object); ? # 0.1+ 0.2 == 0.3 ? # Что выведет alert(typeof NaN); ? # Что выведет alert(NaN === NaN); ? # В чём различие свойств innerHTML и outerHTML? # Какая разница между операторами == и ===? # В чем разница между Object.getOwnPropertyNames() и Object.keys()? # С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки? # Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку? # Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных? # Что такое замыкания (closure) в JavaScript? # Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки). # Что вернет выражение +new Date()? Чем отличается от Date.now(). # Какое значение возвращает данное предложение ~~3.14? # Какое значение возвращает данное предложение? # Что покажут эти два alert? # Чему равно foo.length? # Что такое prototype в javascript? # Какие способы навешивания обработчиков событий вы знаете? # Eсть ли разница между window и document? # Вызываются ли document.onload и window.onload одновременно? # Является ли атрибут (attribute) аналогом свойства (property)? # Как остановить дальнейшее распространение события? # Назовите различные пути для получения элемента из DOM дерева? # Какой наибыстрейший метод для получения элемента через css селектор? # Могу ли я удалить удалить обработчик события с элемента? # Почему querySelectorAll(‘.my-class’) медленнее, чем getElementsByClassName(‘myclass’)? # Почему я не могу использовать forEach или похожий метод массива для NodeList? # Если вам необходимо реализовать getElementByAttribute, как вы будете это делать? # Как бы вы добавили класс к элементу через селектор? # Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия? # Как проверить, что один элемент является дочерним другому? # Какой метод больше всего подходит для создания DOM элемента? Что лучше innerHTML или createElement? # Каким образом можно предотвратить множественный вызов обработчика для одного события? # Что такое reflow? # Как я могу проверить были событие отменено или нет? # Какие причины reflow? Как можно уменьшить reflow? # Что такое repaint и когда оно происходит? # Есть ли что-то такое о чём нужно позаботится при использовании node.cloneNode()? # Как быть уверенным в том, что DOM подготовлен и можно выполнять JavaScript, как реализовать $(document).ready? # Что такое всплытие? # Как можно уничтожить несколько элементов с одним вызовом click? # Как предотвратить нажатие по ссылке? # Создайте кнопку, которая удаляется при нажатии на неё, и создаются две новые кнопки в этом же месте. # Как отлавливать все нажатия на странице? # Как получить весь текст на странице? # Что такое defer и async? # Какие существуют типы нод? h2. Ответы h3. Как переадресовать страницу в JavaScript? {{dmsf_image(323)}} h3. Сколько параметров можно передать функции? Сколько угодно. h3. Нужно алертом вывести какое-то сообщение, спустя 3 секунды после запуска скрипта. Как это сделать? Так: <pre><code class="javascript"> setTimeout(alert("Hello", 3000)); </code></pre> или так: <pre><code class="javascript"> setTimeout(functiom() {alert("Hello")}, 3000); </code></pre> h3. Чем отличается наследование в JavaScript от наследования в PHP? В отличие от PHP, где наследование можно делать одним способом, в JavaScript таких способов много. На уровне языка реализовано наследование на прототипах. В JavaScript каждый объект может иметь ассоциацию с другим объектом - так называемый "прототип" (prototype). В случае, если поиск некоторого свойства (или метода) в исходном объекте заканчивается неудачно, интерпретатор пытается найти одноименное свойство (метод) в его прототипе, затем - в прототипе прототипа и т. д. К примеру, если мы затребовали обращение к obj.prop (или, что абсолютно то же самое, obj['prop']), JavaScript начнет искать свойство prop в самом объекте obj, затем – в прототипе obj, прототипе прототипа obj, и так до конца. h3. Приведи пример наследования в JavaScript. Например, пусть объект "cat" наследуется от объекта "animal". В наследовании на прототипах это реализуется как ссылка <pre><code class="javascript"> cat.prototype = animal; </code></pre> Или вот чуть более развернутый пример. MyType наследуется от Obj: {{dmsf_image(323)}} h3. Пара слов об объектах в JavaScript? Объекты (они же - ассоциативные массивы, хэши) и работа с ними в JavaScript реализованы не так, как в большинстве языков. Объект в JavaScript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов. h3. Что представляет из себя метод объекта в JavaScript? Метод объекта в JavaScript - это просто функция, которая добавлена в ассоциативный массив. h3. Зачем в JavaScript перед переменной писать var? Если создавать переменную через обычное присваивание - будет создана "глобальная переменная". Пример: <pre> max = 100; </pre> Если создавать переменную с использованием слова var, тогда будет создана "локальная переменная", которая перестаёт существовать после завершения работы функции. Пример: <pre> var max = 100; </pre> h3. Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b } Есть ли между ними разница? Если есть то какая? Есть, разница в видимости функции. Вариант функции без var виден везде в текущей области видимости. В том числе и до самого определения функции. Вариант с var присваивает функцию переменной, поэтому такая функция видна только после определения. h3. Как создать массив в JavaScript? Вот несколько способов. {{dmsf_image(325)}} h3. Можно ли в JavaScript использовать функцию в качестве конструктора? Вот так: {{dmsf_image(326)}} h3. Сколько и какие конструкции для циклов есть в JAVASCRIPT? Три: for, while и do...while. h3. Что cделает код: break mark; ? Выйдет из текущего блока цикла или switch на метку "mark". h3. Можно ли задать массив таким образом: var a = “a,b”.split(‘,’)? Да, можно. h3. Что выведет alert(typeof null); ? Выведет сообщение "object". h3. Что выведет alert(null instanceof Object); ? Выведет сообщение "false". h3. 0.1+ 0.2 == 0.3 ? Нет, т.к. вычисленное значение будет равно 0.30000000000000004. Это действие точности вычислений и проявляется она не только в JavaScript h3. Что выведет alert(typeof NaN); ? "Number" h3. Что выведет alert(NaN === NaN); ? "false" h3. В чём различие свойств innerHTML и outerHTML? Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново. outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента. Также, важно отметить, что innerHTML поддерживается всеми современными браузерами, а outerHTML поддерживается в IE (с некоторыми отличиями от остальных браузеров), в последних версиях Opera, и в браузерах на основе последних WebKit (Safari, Chrome), но не поддерживается в Firefox. Для кода: {{dmsf_image(327)}} innerHTML возвратит: <pre><code class="javascript"> <p class="inner"></p> </code></pre> outerHTML возвратит: <div class="outer"><p class="inner"></p></div> h3. Какая разница между операторами == и ===? Оператор == сравнивает на равенство, а вот === сравнивает на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу. Именно из-за этого он обычно и используется. h3. В чем разница между Object.getOwnPropertyNames() и Object.keys()? Object.getOwnPropertyNames() возвращает перечислимые и не перечислимые свойства из объекта или массива. {{dmsf_image(328)}} Object.keys() возвращает перечислимые свойства из объекта или массива {{dmsf_image(329)}} h3. С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки? Это возможно с помощью конструкции try{}... catch{} {{dmsf_image(330)}} h3. Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку? {{dmsf_image(331)}} Функция а() инициализируется на этапе загрузки скрипта, как бы "всплывает вверх" а функция б инициализируется, когда объявляется переменная b h3. Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных? Глобальная переменная - переменная, которая доступна (видима) во всем документе, в отличии от локальной (ограничена рамками блока программного кода, внутри которого она определена) <pre><code class="javascript"> var = 5; function myFunction() { alert(myvar); } </code></pre> Большинство JavaScript разработчиков избегает использования глобальных переменных. Одна из причин - возможный конфликт имен глобальных и локальных переменных. Так же код использующий глобальные переменные может быть тяжелее сопровождать и тестировать. h3. Что такое замыкания (closure) в JavaScript? Простыми словами это внутренняя функция, т.е. функция в функции. Замыканием (closure) называют потому, что после выполнения родительской или внешней функции, код внутренней все еще "живет" в интерпретаторе, и его можно выполнить. Ошибок не возникнет даже если внутренняя функция (замыкание) будет использовать переменные из внешней функции. Например, эту особенность можно использовать для создания функций обработчиков событий: {{dmsf_image(332)}} h3. Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки). <pre><code class="javascript"> function getExtension(filename) { var fragments = filename.split("."); return fragments[fragments.length - 1]; } </code></pre> h3. Что вернет выражение +new Date()? Чем отличается от Date.now(). Ответ в том, что +new Date(); создаст экземпляр объекта Date и благодаря + переведет его в числовой формат. Во втором случае вызовется статический метод конструктора, который является более приоритетным, т.к. во-первых он не требует создания экземпляра, а во-вторых является более понятным. h3. Какое значение возвращает данное предложение ~~3.14? Ответ: 3 h3. Какое значение возвращает данное предложение? "i'm a lasagna hog".split("").reverse().join(""); Ответ: "goh angasal a m’i" h3. Что покажут эти два alert? {{dmsf_image(333)}} Ответ: "Hello World" и ReferenceError: bar is not deÙned h3. Чему равно foo.length? <pre><code class="javascript"> var foo = []; foo.push(1); foo.push(2); </code></pre> Ответ: 2 h3. Что такое prototype в javascript? В общих чертах prototype - это свойство позволяющее добавлять уже существующим объектам свойства, также используется для эмуляции наследования классов в JavaScript. Подробный ответ написан здесь . Еще как вариант, можно упомянуть о Prototype.js. Это популярная библиотека добавляющая удобные ООП возможности в программы на JavaScript-е. h3. Какие способы навешивания обработчиков событий вы знаете? События можно добавлять тремя способами: * htmlElement.onclick = function(event) { .... } - так можно добавить только один обработчик * htmlElement.addEventListener( "click", ... ) - так можно навесить несколько обработчиков, сохраняет порядок обработчиков * htmlElement.attachEvent( "on"+имя_события, обработчик) - тоже можно навесить несколько, не сохраняет порядок обработчиков, нет доступа к элементу на котором сработало событие. h3. Eсть ли разница между window и document? h3. Вызываются ли document.onload и window.onload одновременно? h3. Является ли атрибут (attribute) аналогом свойства (property)? h3. Как остановить дальнейшее распространение события? h3. Назовите различные пути для получения элемента из DOM дерева? h3. Какой наибыстрейший метод для получения элемента через css селектор? h3. Могу ли я удалить удалить обработчик события с элемента? h3. Почему querySelectorAll(‘.my-class’) медленнее, чем getElementsByClassName(‘myclass’)? h3. Почему я не могу использовать forEach или похожий метод массива для NodeList? h3. Если вам необходимо реализовать getElementByAttribute, как вы будете это делать? h3. Как бы вы добавили класс к элементу через селектор? h3. Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия? h3. Как проверить, что один элемент является дочерним другому? h3. Какой метод больше всего подходит для создания DOM элемента? Что лучше innerHTML или createElement? h3. Каким образом можно предотвратить множественный вызов обработчика для одного события? h3. Что такое reflow? h3. Как я могу проверить были событие отменено или нет? h3. Какие причины reflow? Как можно уменьшить reflow? h3. Что такое repaint и когда оно происходит? h3. Есть ли что-то такое о чём нужно позаботится при использовании node.cloneNode()? h3. Как быть уверенным в том, что DOM подготовлен и можно выполнять JavaScript, как реализовать $(document).ready? h3. Что такое всплытие? h3. Как можно уничтожить несколько элементов с одним вызовом click? h3. Как предотвратить нажатие по ссылке? h3. Создайте кнопку, которая удаляется при нажатии на неё, и создаются две новые кнопки в этом же месте. h3. Как отлавливать все нажатия на странице? h3. Как получить весь текст на странице? h3. Что такое defer и async? h3. Какие существуют типы нод?Go to top