10 популярных вопросов на собеседовании по JavaScript

программист JavaScript

Переводчик: Front-end Xiaozhi

оригинал:medium.com/@jinlan119/…

Ставь лайк и смотри, поиск в WeChat【Переезд в мир】Обратите внимание на этого человека, который не имеет большого фабричного прошлого, но имеет восходящий и позитивный настрой. эта статьяGitHub GitHub.com/QQ449245884…Он был включен, статьи были классифицированы, и многие мои документы и учебные материалы были систематизированы.

Все говорили, что нет проекта для написания резюме, поэтому я помог вам найти проект, и это было с бонусом.【Учебник по строительству】.

1. Как понимать JS вthisключевое слово?

Новички в JS всегда правыthisключевое слово сбивает с толку, потому что это не так в JS по сравнению с другими современными языками программированияthisКлючевые слова немного сложны. «это» обычно относится к текущему объекту, но все происходит не так, как должно. в JSthisКлючевое слово определяется вызывающей стороной функции, кто бы ее ни вызывал.thisсмотря на что он указывает. Если звонящий не найден,thisукажет наwindowsобъект.

принеси немного кукурузы

Первый пример простой. передачаtestв объекте func(),следовательноfunc()где "это" указывает наtestобъект, поэтому напечатанныйpropдаtestсерединаprop,Прямо сейчас42.

var test = {
 prop: 42,
func: function(){
 return this.prop;
},
 };
console.log (test.func()); // 42

Если мы позвоним напрямуюgetFullnameфункция, второй пример распечатает'David Jones', потому что в это времяthisВызывающий абонент не может быть найден, поэтому по умолчаниюwindowобъект, напечатанныйfullnameЭто глобально.

var fullname = ‘David Jones’
var obj ={
fullname: ‘Colin Brown’,
prop:{
  fullname:’Aurelio Deftch’,
  getFullname: function(){
    return this.fullname;
  }
 }
}
var test = obj.prop.getFullname
console.log(test()) // David Jones
obj.prop.getFullname() // ‘Aurelio Deftch’ 

2. Из-заthisКлючевые слова сбивают с толку, как это исправить

Есть много способов решить эту проблему, однако, какое бы решение вы ни выбрали, самое главное — знать, что вы решили позволитьthisк какому объекту.

Как только вы это пойметеthisОбъект, на который указывает, вы можете напрямую изменить его на имя объекта. В противном случае используйтеbind,call,applyФункции также могут помочь.

3. Что такое замыкание

Когда я впервые объяснял замыкания, я имел обыкновение говорить «функция внутри функции», однако это не точно описывало, что именно означает замыкание.

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

function add(n){
  var num = n
  return function addTo(x){
    return x + num
  }
}
addTwo = add(2)
addTwo(5)    

Другое применение замыканий — создание закрытых переменных и методов. JavaScript не поддерживает oops так же хорошо, как Java. В JS нет явного способа создания приватных методов, но замыкания могут создавать приватные методы.

4. Объясните продвижение переменных

Поднятие переменных — это поведение JavaScript по умолчанию, что означает, что все объявления переменных перемещаются в верхнюю часть текущей области видимости, и переменные можно использовать до их объявления. Инициализация не поднимается, подъем применяется только к объявлениям переменных.

var x = 1
console.log(x + '——' + y) // 1——undefined
var y = 2

5. Как JavaScript обрабатывает синхронные и асинхронные ситуации

Хотя JavaScript — это стек вызововодин потокязык программирования, но он также может обрабатывать некоторые асинхронные функции, используя механизм, называемый циклом событий. Понимание того, как работает JavaScript на базовом уровне, является ключевой частью понимания того, как JS обрабатывает асинхронность.

Как показано, стек вызовов — это место, где расположены функции. Как только функция будет вызвана, она будет помещена в стек. Однако асинхронные функции не сразу помещаются в стек вызовов, они помещаютсяОчередь задачи выполняется после того, как стек вызовов опустеет. Перенос событий из очереди задач в стек вызовов называетсяцикл событий.

6. Как понимать делегирование событий

Привязка прослушивателей событий к дереву DOM и использование обработчиков событий JS — типичный способ обработки ответов на события на стороне клиента. Теоретически мы могли бы прикрепить прослушиватели к любому элементу DOM в HTML, но из-за делегирования событий делать это расточительно и не нужно.

** Что такое делегирование событий? **

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

7. Как понимать функции высшего порядка

Все в JavaScript является объектом, включая функции. Мы можем передавать переменные в качестве параметров функциям, как и функции. Мы вызываем функцию, которая принимает и/или возвращает другую функцию, называемую функцией высшего порядка.

8. Как отличить функции объявления от функций-выражений

// 声明函数
function hello() {
  return "HELLO"
}    
// 表达式函数  
var h1 = function hello() {
  return "HELLO"
}

Две функции будут определены в разное время. Объявления определяются во время синтаксического анализа, а выражения определяются во время выполнения, поэтому, если мы напечатаем консольh1, это покажетHELLO.

9. Объясните, как работает прототипное наследование

JavaScript не является дружественным к объектно-ориентированному языку программирования, но он по-прежнему использует идею наследования для реализации зависимостей и использует множество встроенных функций, чтобы сделать его гибким в использовании. Знание того, как работает прототипное наследование, поможет вам лучше понять JavaScript и избежать концептуального неправильного использования.

Лучше всего представить себе всю механику JavaScript в голове, чтобы понять наследование прототипов.

В JavaScript есть суперобъект, от которого будут наследоваться все объекты.'__ proto__'остроконечный объектPrototypeвнутренние свойства. Прототип содержит функцию-конструктор, из которой объект может создать экземпляр.__proto__всегда существует в объекте и иерархически указывает на прототип, которому он принадлежит, до тех пор, покаnull, который называетсяСеть прототипов.

10. Объясните строгий режим

Строгий режим используется для стандартизации обычной семантики JavaScript. Строгий режим может быть встроен в нестрогий режим, ключевое слово‘use strict’. Код после использования строгого режима должен следовать строгим правилам синтаксиса JS. Например, точки с запятой используются после объявления каждого оператора.

общаться с

Статья постоянно обновляется каждую неделю. Вы можете выполнить поиск «Big Move to the World» в WeChat, чтобы прочитать и обновить ее как можно скорее (на одну или две статьи раньше, чем в блоге). Эта статья находится на GitHub.GitHub.com/QQ449245884…Он был включен, и многие мои документы были разобраны. Добро пожаловать в Звезду и совершенство. Вы можете обратиться в тестовый центр для ознакомления во время собеседования. Кроме того, обратите внимание на паблик-аккаунт и ответьте в фоновом режиме.Благосостояние, вы можете увидеть преимущества, вы знаете.