В мире ИТ требуется много разработчиков JavaScript. Если вы подходите для этой роли, у вас будет много возможностей сменить работу и увеличить свою зарплату. Но прежде чем вас примет компания, вам нужно продемонстрировать свои навыки, чтобы пройти собеседование. В этой статье я покажу вам 5 типичных вопросов на фронтенд-интервью и способы их решения.Эти 5 вопросов часто используются для проверки навыков кандидата в JavaScript. Они так весело!
Проблема 1: Объем
Рассмотрим следующий код:
(function() {
var a = b = 5;
})();
console.log(b);
Что напечатает консоль?
Отвечать
Приведенный выше код будет распечатан5.
Ловушка этой проблемы заключается в том, что в выражении немедленно выполняемой функции (IIFE) есть два имени, но там, где переменная определяется ключевым словомvarобъявить. это значитaявляется локальной переменной этой функции. напротив этого,bнаходится в глобальной области видимости.
Еще один подводный камень этой проблемы в том, что в функции он не использует"строгий режим" ('use strict';). еслистрогий режимЕсли этот параметр включен, код сообщит об ошибке Uncaught ReferenceError: b не определено. Помните, что строгий режим требует, чтобы вы явно ссылались на глобальную переменную, когда вам нужно ее использовать. Поэтому нужно писать так:
(function() {
'use strict';
var a = window.b = 5;
})();
console.log(b);
Проблема 2: Создание «нативных» методов
существуетStringопределить объектrepeatifyфункция. Эта функция принимает целочисленный параметр, чтобы указать, сколько раз нужно повторить строку. Эта функция просит строку повторить указанное количество раз. Например:
console.log('hello'.repeatify(3));
должен распечататьhellohellohello.
Отвечать
Возможная реализация выглядит так:
String.prototype.repeatify = String.prototype.repeatify || function(times) {
var str = '';
for (var i = 0; i < times; i++) {
str += this;
}
return str;
};
Этот вопрос проверяет мастерство разработчика в наследовании в javascript иprototypeэто свойство. Это также подтверждает, что у разработчиков есть возможность расширять функциональность собственных типов данных (хотя они не должны этого делать).
Еще один момент этого вопроса — убедиться, что вы знаете и знаете, как избежать перезаписи уже существующих функций. Это можно сделать, определив, существует ли функция перед ее настройкой.
String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};
Этот трюк полезен, когда вам нужно реализовать функции обратной совместимости для старых браузеров.
Проблема 3: Подъем переменных
Выполнение следующего кода Что происходит? Почему?
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
return 2;
}
}
test();
Отвечать
Результат выполнения этого кодаundefinedа также2.
Причина такого результата в том, что поднимаются как переменные, так и функции. Таким образом, вaПри печати он уже существует в области видимости функции (т. е. объявлен), но его значение по-прежнему равноundefined. Другими словами, приведенный выше код и следующий код эквивалентны.
function test() {
var a;
function foo() {
return 2;
}
console.log(a);
console.log(foo());
a = 1;
}
test();
Вопрос 4:thisкак это работает в джаваскрипте
Каков результат следующего кода? Пожалуйста, объясните свой ответ.
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname());
var test = obj.prop.getFullname;
console.log(test());
Отвечать
Приведенный выше код распечатываетAurelio De Rosaа такжеJohn Doe. Причина в том, что в JavaScript контекст функции, которыйthisОбъект, на который ссылается ключевое слово, зависит от того, как вызывается функция, а не от того, как функция определена.
во-первыхconsole.log()вызов,getFullname()как естьobj.propвызывается функция. Итак, здесь контекст указывает на последнее, и функция возвращаетthisобъектfullnameАтрибуты. Вместо этого, когдаgetFullname()назначен какtestзначение переменной, этот контекст указывает на глобальный объект (window). Это потому что,testНеявно задается как свойство глобального объекта. Таким образом, вызов функции возвращаетwindowизfullnameЗначение свойства, в этом коде это значение задается первой строкой оператора присваивания.
Вопрос 5:call()а такжеapply()
Исправьте предыдущую проблему, пусть последняяconsole.log()распечаткаAurelio De Rosa.
Отвечать
Чтобы решить эту проблему, вы можете передать функциюcall()илиapply()Форсировать контекст вызова функции. если ты не знаешьcall()а такжеapply()Для отличия рекомендую прочитать статью В чем разница между function.call и function.apply?. В следующем коде я бы использовалcall(), а тут сapply()Такой же результат можно получить:
console.log(test.call(obj.prop));
В заключение
В этой статье мы обсудили 5 типичных вопросов, которые часто задают интервьюерам JavaScript на собеседованиях. В реальном интервью реальные вопросы могут различаться, но затронутые концепции и затронутые темы обычно очень похожи. Надеюсь, предыдущие тесты были вам интересны. Если вы не знаете некоторых ответов, не волнуйтесь: продолжая учиться и приобретая опыт, вы сможете решить эти проблемы.
Если во время интервью вам задавали другие интересные вопросы, не стесняйтесь поделиться ими с нами прямо сейчас. Это поможет многим разработчикам.
У меня есть общедоступная учетная запись WeChat, и я буду делиться с вами передовыми методами обучения и техническими передовыми технологиями без добавок каждый день. Друзья, которым нравится моя публикация, могут выполнить поиск в WeChat: «Front-end Siege Lion Alliance» или WeChat: «qianduangcslm», чтобы подписаться.
- Первоисточник: Боле Интернет
- Оригинальное имя автора: Хуан Лиминь
- Оригинальная ссылка:5 типичных вопросов на собеседовании по JavaScript