Решение проблем с JavaScript: использование Call and Apply

На прошлой неделе я участвовал в онлайн-мероприятии, организованном компанией Skilled. Если вы не знакомы с этим сайтом, в основном они предоставляют платформу для имитационных технических интервью. Сдать или не пройти, я считаю, что стоит проверить их услуги, если вы участвуете в процессе собеседования.

Любой, кто когда-либо работал в области разработки программного обеспечения, может сказать вам, что эти типы оценок являются привратником к получению предложения о работе. Резюме идет только до сих пор; эти проблемы позволяют вам доказать свои навыки потенциальному работодателю. Поэтому уверенность в том, что вы знаете, возможность взаимодействовать с наблюдающим и наличие хорошей системы решения проблем жизненно важны для успеха.

Я собираюсь изложить некоторые советы, которые я получил в тот день, а затем рассмотреть проблему, которая сначала была немного сложной, но как только я смог применить (без каламбура) несколько новых стратегий, это стал довольно веселым и интересным процессом.

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

создать цикл «обратной связи»

Это не обязательно означает «создать цикл», как рекурсивную функцию. На самом деле это означает настроить тестовые сценарии, чтобы дать себе обратную связь о направлении, в котором движется ваш код. Что также не обязательно означает писать, например, файл rspec.

Это означает просто: 1.) ведение журнала консоли и 2.) вызов функции во время выполнения.

Поэтому найдите минутку, чтобы просмотреть (ссылки ниже) некоторые из JavaScript, которые чаще всего импортируют нативные функции, а затем давайте перейдем к: вызов и применить.

Итак, теперь, без дальнейших церемоний, вот подсказка:

Давайте на минутку поймем, о чем нас здесь спрашивают. Первое, что я услышал: нам нужно вести счетчик того, сколько раз была вызвана функция; давайте примем это к сведению, но сначала продолжим развивать представление о том, что здесь происходит. Кроме того, к счастью для нас, у нас есть цикл «обратной связи» (пример звонков).

Кроме того, у нас есть две функции, func1 и func2, которые будут переданы в нашу функцию after функциями newFunc1 и newFunc2 вместе с x или числом вызовов newFunc1 или newFunc2 прежде чем его можно будет выполнить. Также обратите внимание: журналы консоли func1, а func2 принимает переменную, а также журналы консоли. Видите разницу?

Также обратите внимание, что наша функция after должна вернуть новую функцию, которая будет применять нашу исходную функцию (функцию, которую мы передаем; в данном случае func1 или func2) после того, как наш счет больше x.

Давайте создадим скелет псевдокода, чтобы понять, что делать. Перво-наперво, счетчик будет отслеживать наши звонки. Мы начнем с 0 и будем увеличивать его на 1 до тех пор, пока счетчик не будет ‹ x раз. Во-вторых, мы установим принимаемую функцию (т.е. func) равной переменной с именем theFunc. Это необходимо спросите вы? Не только для того, чтобы заставить его работать, нет. Но его копия необходима для удовлетворения нашего запроса на возврат «новой функции». Ах, дьявол кроется в деталях. В-третьих, нам понадобится оператор if/else, чтобы оценить, были ли выполнены наши условия. Наконец, и вот весь смысл названия моей статьи: мы будем использовать apply. При этом мы будем использовать команду «theFunc», которая, если вы читали документы MDN, принимает сначала объект (то есть «это»), а затем массив аргументов. Поскольку этот объект не привязан к нашим исходным функциям, мы установим для него значение null, но наш новый «theFunc» по-прежнему будет принимать массив argsArray, который, как мы можем сказать, является аргументами (он должен принимать это). И в результате я получаю следующий код:

Это не очень хорошо, потому что он не очень СУХОЙ. Например, в нашем операторе else мы можем просто увеличить значение, например: count +=1. Более того, функция возврата может быть упрощена до приема переменной и использования этого параметра исходной функцией. Это будет выглядеть примерно так:

Любой из них в значительной степени работает. Итак, я оставляю на ваше усмотрение, мой читатель, возможность критиковать мою работу и давать мне отзывы о том, как этот код выглядит для вас. Вы не против, если кто-то проведет техническое собеседование и предоставит любой из этих ответов, или я сильно ошибся? Серьезно, я хотел бы знать: я пытаюсь стать лучше в этом, и был бы признателен за любую помощь, советы и проблемы с JavaScript, которые вы можете бросить мне на практике.

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