Я только что закончил школу, чтобы пройти собеседование на стажировку с вопросом после собеседования на один год.Если ответ не очень хороший, пожалуйста, поправьте меня!
На главной странице также есть вопросы для интервью в формате html/css, а затем есть vue, es6....постоянно обновляемые
(Это непросто собрать, пожалуйста, поставьте лайк перед просмотром, чтобы выработать хорошую привычку~)
1. Как понять это ключевое слово в JS?
this представляет текущий объект, указание this определяется в соответствии с контекстом вызова и по умолчанию указывает на объект окна.
Глобальная среда: глобальная среда находится внутри, где this всегда указывает на объект окна.
Местная среда:
1. Вызов функции непосредственно в глобальной области видимости, это указывает на окно.
2. Вызовы объектных функций, какой объект вызывается, будет указывать на какой объект.
3. Используйте new для создания экземпляра объекта, и this в конструкторе указывает на созданный объект.
4. Используйте вызов или заявку, чтобы изменить смысл этого.
2. Что такое область видимости в JavaScript?
В JavaScript каждая функция имеет свою область видимости. Область видимости — это, по сути, набор переменных и правил доступа к этим переменным по имени. Только код внутри функции может получить доступ к переменным в области действия функции.
Имена переменных в одной области видимости должны быть уникальными. Область может быть вложена в другую область. Если одна область вложена в другую область, код в самой внутренней области может получить доступ к переменным другой области.
3. Что такое замыкание
Когда я впервые объяснял замыкания, я имел обыкновение говорить функция внутри функции, однако это не совсем точно описывало, что означает замыкание.
Замыкание — это создание объемлющей лексической области внутри другой области. Обычно он автоматически возвращается для создания этой лексической среды. Эта среда состоит из любых локальных переменных, которые были в области видимости при создании замыкания. Это похоже на микрофабрику, использующую это сырье для производства продуктов с определенными функциями.
4. Объясните равенство в JavaScript.
В JavaScript есть строгие сравнения и сравнения приведения:
Строгие сравнения (например, ===) проверяют, равны ли два значения, не запрещая приведения;
Абстрактные сравнения, такие как ==, проверяют, равны ли два значения, допуская приведение типов.
var a = "42";
var b = 42;
a == b; // true
a === b; // false
Если какое-либо из сравниваемых значений может быть истинным или ложным, используйте ===, а не ==;
Если какие-либо из сравниваемых значений являются этими конкретными значениями (0, "", или []), используйте ===, а не ==;
В других случаях == можно безопасно использовать. Это не только безопасно, но во многих случаях упрощает и улучшает читаемость кода.
5. Объясните подъем переменных
Поднятие переменных — это поведение JavaScript по умолчанию, что означает, что все объявления переменных перемещаются в верхнюю часть текущей области видимости, и переменные можно использовать до их объявления. Инициализация не поднимается, подъем применяется только к объявлениям переменных.
var x = 1
console.log(x + '——' + y) // 1——undefined
var y = 2
6. Как понимать делегирование событий
Привязка прослушивателей событий к дереву DOM и использование обработчиков событий JS — типичный способ обработки ответов на события на стороне клиента. Теоретически мы могли бы прикрепить прослушиватели к любому элементу DOM в HTML, но из-за делегирования событий делать это расточительно и не нужно.
- Что такое делегирование событий?
Это уловка, чтобы прослушиватели событий на родительских элементах также влияли на дочерние элементы. В общем, распространение событий (захват и всплытие) позволяет нам реализовать делегирование событий. Всплывание означает, что когда запускается дочерний элемент (цель), родитель этого дочернего элемента также может запускаться слой за слоем, пока он не столкнется с исходным слушателем (текущей целью), привязанным к DOM. Свойство захвата превращает фазу события в фазу захвата, позволяя событию перемещаться вниз к элементу; таким образом, направление возбуждения противоположно фазе всплытия. Значение по умолчанию для захвата — false.
7. Объясните строгий режим
Строгий режим используется для стандартизации обычной семантики JavaScript. Строгий режим может быть встроен в нестрогий режим с помощью ключевого слова «использовать строгий». Код после использования строгого режима должен следовать строгим правилам синтаксиса JS. Например, точки с запятой используются после объявления каждого оператора.
8. Объясните значение null и undefined в JavaScript.
- В JavaScript есть два базовых типа: null и undefined. Они представляют разные значения:
- Еще не инициализировано: не определено;
- Пустое значение: ноль.
//null和undefined是两个不同的对象
null == null //true
null === null //true
null == undefined //true
null === undefined //flase
9. Объясните значения и типы в JavaScript.
JavaScript предоставляет два типа данных: примитивные типы данных и ссылочные типы данных.
Основные типы данных:
- String
- Number
- Boolean
- Null
- Undefined
- Symbol
Типы справочных данных:
- Object
- Array
- Function
10. Объясните всплывающую подсказку событий и как ее остановить?
Всплывание событий — это когда наиболее глубоко вложенный элемент запускает событие, которое затем запускается в родительском элементе в порядке вложенности.
Одним из способов предотвращения всплытия событий является использование event.stopPropagation() или event.cancelBubble (до IE 9).
11. Какова роль window.onload?
window.onload — это событие, вызываемое после загрузки документа и ресурсов, чтобы убедиться, что js получает элемент уже загружен.
12. Расскажите, как вы понимаете цепочку областей видимости?
Цепочка областей видимости — это механизм поиска в js. Поиск осуществляется в текущей области. Поиск в текущей области не выполняется в области верхнего уровня до самого внешнего уровня. Если она не найдена, она не определена.
13. Классификация таймеров? В чем их отличие и использование?
Js中有两种定时器:setInterval:间歇执行,setTimeout:延迟执行
setInterval(函数,时间) 时间单位ms,
语法:setInterval(function(){},1000); 隔一秒执行函数一次
一般用于倒计时,轮播图
setTimeout(函数,时间) 时间单位ms,
语法:setTimeout(function(){},1000); 延迟一秒执行函数一次,只会执行一次
一般用于广告,广告弹出层
14. Дедуплицируйте следующие строки и удалите специальные символы. Отсортируйте строки в порядке, в котором цифры идут первыми, а буквы последними.
如下:“1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs”
var str = “1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs”;
var n = “”;
var s="";
for(var i=0;i<str.length;i++){
if((str[i]>=0&&str[i]<=9)&&n.indexOf(str[i])==-1){
n+=str[i];
}else if((str.charCodeAt(i)>=97&&str.charCodeAt(i)<=122)&&s.indexOf(str[i]) == -1){
s+=str[i];
}
}
console.log(n+s); //12345fdsarg
15. Перехватите определение в строке «abcdefg».
var str = “abcdefg”;
if(str.indexOf(“def”)!=-1){
console.log(str.substr(str.indexOf(“def”),3));
}
16. Метод массива pop() push() unshift() shift()?
push: добавить один или несколько элементов в конец массива
Pop: удалить элемент в конце массива, вернуть удаленный элемент
unshift: добавить или удалить элементы из головы массива
сдвиг: удалить элемент в начале массива и вернуть удаленный элемент
17. В чем разница между split() и join()?
split — это метод строки, который разбивает строку на массив в соответствии с определенным флагом.
Пример: "u&s".split("&") ------ ["u","s"]
Join: это метод массива, который объединяет массив в строку с помощью флагов ["u", "s"].join("-") – 'u-s'
18. Напишите метод дедупликации массива.
function sort(arr) {
for(var i = 0;i<arr.length;i++){
for(var j = i+1;j<arr.length;j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
j–; //删除一个元素后,后面的元素会依次往前,下标也需要依次往前
}
}
}
return arr
}
19. Алгоритм пузырьковой сортировки?
for(var i = 0;i<arr.length;i++){
for(var j = 0;j<arr.length-i;j++){
if(arr[j] > arr[j+1]){ //
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
20. DOM как добавлять, удалять, перемещать, копировать, создавать и находить узлы
获取子节点
父节点.children
父节点.childNodes
获取父节点
子节点.parentNode
子节点.offsetParent
创建
document.createElement(‘标签名’)
document.createTextNode(‘文本内容’)
添加
父节点.appendChild(子节点)
父节点.insertBefore(newChild,refChild)
复制
被复制的节点.cloneNode(true)
删除:
节点.remove()
父节点.removeChild(子节点)
替换
父节点.replaceChild(newChild,refChild)
21. Что такое объект окна, что такое объект документа?
window — самый большой объект в js, представляющий окно, включая документ
объект документа документа, представляющий HTML
22. В чем разница между offsetWidth, clientWidth и scrollTop?
offsetWidth: ширина заполнителя, включая ширину содержимого + левое и правое заполнение + левую и правую границу
clientWidth: видимая ширина, включая ширину содержимого + отступы слева и справа
scrollTop: высота, на которую прокручивается страница
23. Как получить поисковый контент по URL-адресу?
window.location.search
24. В чем разница между событиями, механизмом событий IE и Firefox?
Поток событий IE всплывает, в то время как Firefox поддерживает и всплывание, и захват.
25. В чем разница между привязкой событий и обычными событиями.
Label.Event: если вы добавите одно и то же событие к одному и тому же элементу, последнее перезапишет первое.
Привязка события: вы можете добавить одно и то же событие к одному и тому же элементу, не перезаписывая его.
26. Объясните ход событий?
Фаза захвата события: когда происходит событие, оно по очереди передается из окна в дочерние элементы.
Фаза таргетинга: определение целей события
Стадия всплытия события: цель события начинает обрабатывать событие, и после обработки событие будет передаваться родительскому элементу по очереди, пока окно
События обрабатываются в пузырьках событий, т.е.
27. Какие виды событий присутствуют в эффекте перетаскивания?
Нажмите onmousedown, перетащите мышь, чтобы всплыть наmouseup
28. Каковы плюсы и минусы файлов cookie?
优点:极高的扩展性和可用性
1.通过良好的编程,控制保存在cookie中的session对象的大小。
2.通过加密和安全传输技术(SSL),减少cookie被破的可能性。
3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
缺点:
1.Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
因为这些弊端(主要是cookie的大小和多少都受限制,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用),IE8以后,就出现一个web storage;它仅仅是为了本地缓存数据而存在;但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在。
29. В чем разница и функция call() и apply()?
Все они используются для изменения точки этого, и будут некоторые различия в процессе передачи значений.
call (указать на это, параметр 1, параметр 2...)
применить (указать на это, [параметр 1, параметр 2...])
30. Процесс создания ajax.
function ajax(json) {
json.data = json.data||""; //如果没有请求参数,为空
json.contentType = json.contentType || “application/x-www-form-urlencoded”; //如果没有字符编码,用默认的
//1.创建对象
if(window.XMLHttpRequest){ //正常
var ajax = new XMLHttpRequest();
}else { //兼容ie6
var ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
}
//2.建立连接
if(json.type.toUpperCase() ==“get”.toUpperCase()){
ajax.open(“GET”,json.url+"?"+json.data,true);
//3.发送请求
ajax.send();
}else {
ajax.open(“POST”,json.url,true);
//3.设置请求头 ajax.setRequestHeader(“Content-type”,json.contentType+";charset=utf-8");
//4.发送请求
ajax.send(json.data);
}
//4.监听结果
ajax.onreadystatechange = function () {
if(ajax.readyState == 4){
if(ajax.status == 200){
json.success(ajax.response);
}
}
}
}
31. Разница между get и post при запросе ajax, когда использовать post.
1. Запрос GET будет передавать параметры после URL-адреса, а запрос POST отправляется на веб-сервер в качестве содержимого объекта HTTP-сообщения. Конечно, в запросах Ajax это различие невидимо для пользователя.
2. Емкость передаваемых данных GEt мала и небезопасна, а содержание данных после передачи велико и более безопасно;
Безопаснее выбрать пост при отправке некоторых данных на сервер
32. Как интерпретировать данные json во время запроса ajax.
Если это json в виде строки: eval("("+ajax.response+")")
Если это локальный файл json: JSON.parse(data)
33. В чем разница между синхронным и асинхронным?
Асинхронный: в процессе запроса данных у клиента и сервера можно делать другие вещи
Синхронизация: В процессе запроса данных между клиентом и сервером больше ничего сделать нельзя
34. Общие коды статуса http?
Вам не нужно знать все, только общие, такие как 200 404 503
200 Код состояния: указывает, что запрос был успешным, желаемый заголовок ответа или тело данных вернет этот ответ.
Код состояния 201: указывает, что запрос был выполнен успешно, сервер создал новый ресурс, и его URI был возвращен с заголовком Location. Если требуемый ресурс не может быть создан вовремя, он должен вернуть «202 Accepted».
Код состояния 202: Сервер принял запрос, но еще не обработал его.
Код состояния 301: запрошенный ресурс был окончательно перемещен в новое место. Когда сервер возвращает этот ответ (на запрос GET или HEAD), он автоматически перенаправляет запросчика в новое место.
Код состояния 302: запрошенный ресурс временно ответил на запрос с другого URI, но запрашивающая сторона должна продолжать использовать исходное местоположение для будущих запросов.
304 Запрошенная страница не была изменена с момента последнего запроса. Когда сервер возвращает этот ответ, содержимое веб-страницы не возвращается. Вам следует настроить сервер так, чтобы он возвращал этот ответ (известный как HTTP-заголовок If-Modified-Since), если веб-страница не изменилась с момента последнего запроса запрашивающей стороны.
Код состояния 301: запрошенный ресурс был окончательно перемещен в новое место. Когда сервер возвращает этот ответ (на запрос GET или HEAD), он автоматически перенаправляет запросчика в новое место.
Код состояния 302: запрошенный ресурс временно ответил на запрос с другого URI, но запрашивающая сторона должна продолжать использовать исходное местоположение для будущих запросов.
304 Запрошенная страница не была изменена с момента последнего запроса. Когда сервер возвращает этот ответ, содержимое веб-страницы не возвращается. Вам следует настроить сервер так, чтобы он возвращал этот ответ (известный как HTTP-заголовок If-Modified-Since), если веб-страница не изменилась с момента последнего запроса запрашивающей стороны.
Код состояния 401: запрос требует аутентификации. Сервер может вернуть этот ответ для веб-страниц, требующих входа в систему.
Код состояния 403: Сервер понял запрос, но отказался его выполнять. В отличие от ответа 401, аутентификация не помогает, и запрос не нужно отправлять повторно.
Код состояния 404: запрос не выполнен, и запрошенный ресурс не найден на сервере. Нет информации, чтобы сообщить пользователю, является ли состояние временным или постоянным. Если сервер знает о ситуации, он должен использовать код состояния 410, чтобы сообщить, что старый ресурс постоянно недоступен из-за какой-то внутренней проблемы с механизмом конфигурации, и нет адреса для перехода. Код состояния 404 широко используется, когда сервер не хочет раскрывать, почему именно запрос был отклонен, или нет другого подходящего ответа.
Код состояния 500: сервер столкнулся с непредвиденной ситуацией, из-за которой он не смог завершить обработку запроса. Как правило, эта проблема возникает, когда программный код сервера неверен.
Код состояния 503: сервер в настоящее время не может обработать запрос из-за временного обслуживания или перегрузки сервера. Обычно это временное состояние, которое через некоторое время восстанавливается.
35. Какие операции в js могут вызвать утечку памяти?
1) Утечка памяти, вызванная неожиданными глобальными переменными
утечка функции () {
Leak="xxx";//leak становится глобальной переменной и не будет переработана
}
2) Забытые таймеры или обратные вызовы
3) Утечки памяти, вызванные замыканиями
36. В чем разница между методом $(document).ready() и window.onload?
Разница между window.onload и ready
1.window.onload перезапишет предыдущий
Разница готовности не будет перезаписана, а будет наложена
2. Вызывается после загрузки документов и ресурсов, таких как window.onload.
ready вызывается, как только документ загружается
37. Как решить междоменные проблемы?
Решать междоменные через jsonp, то есть вводить js файл через атрибут src тега скрипта, а возвращать данные через функцию обратного вызова
Ошибка синтаксического анализа KaTeX: ожидается «EOF», получено «&» в позиции 34: … метод script src=’url&̲callback=showDa….ajax(), просто настройте тип данных: «jsonp», чтобы инициировать междоменный запрос
напиши в конце
Собирать не просто, если вы считаете, что это полезно для вас, пожалуйста, поставьте лайк, подпишитесь и поддержите.
Вопросы интервью постоянно обновляются
Коллекция всегда полезная, спасибо~