Предварительное собеседование в конце года — резюме JavaScript (сверхпреднамеренное)

интервью

Я только что закончил школу, чтобы пройти собеседование на стажировку с вопросом после собеседования на один год.Если ответ не очень хороший, пожалуйста, поправьте меня!

На главной странице также есть вопросы для интервью в формате 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», чтобы инициировать междоменный запрос

напиши в конце

Собирать не просто, если вы считаете, что это полезно для вас, пожалуйста, поставьте лайк, подпишитесь и поддержите.

Вопросы интервью постоянно обновляются
Коллекция всегда полезная, спасибо~