Это 8-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.
大佬们好,我是江湖不渡i,专业切图仔。🦞
Прочитав каталог, начальство может подумать, что то, что я пишу, это какие-то банальные вопросы, а в основном это статьи, обобщающие вопросы интервью. На самом деле это не так, я не писал о некоторых вещах, которые всем известны, эти вещи были очень подробно изложены большими парнями на Наггетс. Следующее содержание представляет собой анализ, написанный с другой точки зрения по некоторым общим проблемам, например, от какого рода знания зависит это знание, и могут быть некоторые неожиданные моменты, о которых мы можем не подумать, когда будем просматривать его самостоятельно. Я верю, что всегда будет один или два, о которых вы не подумали раньше Если это действительно кому-то поможет, я надеюсь, что большому парню это понравится, ха-ха. ⚽️⚽️🌶️
объявление переменной
Три ключевых слова: var, let, const
Tipes:var можно использовать во всех версиях ECMAScript, let и const можно использовать только в ECMAScript 6 и более поздних версиях.
Сессия вопросов и ответов:
❓❓❓В чем разница между тремя ключевыми словами
- Областью действия объявления var является область действия функции, а объявления let и const — областью действия.область действия блока.
- Переменная объявления var будет перемещена в начало области действия функции и одновременно инициализирована, let, constПеременная поднята на вершину области видимости, но не инициализирована, область между объявлением и инициализацией называется Temporary Dead Zone (TDZ), которая запрещает чтение и запись, поэтому, на наш взгляд, let и const не будут продвигать переменные.
- var может многократно объявлять и переопределять переменные, объявленные самой собой, но не может переопределять переменные, объявленные let и const.
- Когда объявлены переменные var и let, им не может быть присвоено начальное значение и они могут быть изменены в любое время, когда объявлены константы, они должны быть инициализированы и не могут быть изменены. (Ссылочный тип данных не может изменить указатель, но содержимое может быть изменено)
- Когда сделано глобальное объявление, переменная объявления var зависает на объекте окна, а let и const не находятся на активном объекте соответствующей области блочного уровня в окне, потому что свойства глобального объекта отделены от глобальных переменных. в ЕС6.
- По сравнению с var, let и const помогают сборке мусора повысить производительность, когда область действия блока завершается раньше, чем область действия функции.
❓❓❓ Что такое объем блока?
В соответствии с глобальной областью видимости область действия функции. Область на уровне блоков была добавлена в ES6. Пара {} – это область на уровне блоков. Область на уровне блоков следует использовать с let и const. Для var области на уровне блоков нет.
❓❓❓Зачем вводить область действия блока?
Чтобы устранить дефект, var объявляет переменные с переменными характеристиками продвижения.
❓❓❓Чем вызвано переменное продвижение?
Потому что JS-движок не анализирует и не выполняет программу построчно, а анализирует и выполняет ее по частям. При выполнении фрагмента кода будет проведена «подготовительная работа».Когда js находится в контексте выполнения, он пройдет два этапа: 1. Анализ 2. Выполнение, при входе в контекст выполнения будет объявление функции сначала будут обработаны, а потом уже будут обрабатываться переменные.Объявление, в процессе анализа переменная была объявлена и повешена на объект переменной, но конкретного присваивания нет, поэтому эти переменные и функции можно использовать до того, как они будут заявлено фактически.
❓❓❓Как решить переменное продвижение?
Используйте let и const вместо var для объявления переменных, а также let и const в блочной области видимости.
До объявления она называется временной мертвой зоной, и переменные, объявленные позже в этой области, сообщат об ошибке. ❗️Временная мертвая зона приведет к тому, что тип, который был на 100% безопасным, перестанет быть безопасным.
тип данных
базовый тип данных: строка, число, логическое значение, нуль, неопределенное значение, символ, большое число
ссылочный тип данных: Объект (включая: Массив, Функция)
Tipes:Symbol и Bigint были добавлены в ECMAScript 6 и более поздних версиях. Тип Object — это базовый тип, от которого все остальные ссылочные типы наследуют базовое поведение.
Сессия вопросов и ответов:
❓❓❓В чем разница между примитивными типами данных и эталонными типами данных?
Базовый тип данных включает только себя и обычно хранится в памяти стека.Ни один метод не может изменить значение самого базового типа данных, все возвращают новый. Справочные типы данных включают указатели и содержимое.Указатели хранятся в памяти стека, а содержимое хранится в памяти кучи.
❓❓❓Как судить о типе данных?
- typeof: Ища базовую реализацию js, мы можем судить только о последней. Оценка null как объекта: все машинные коды равны 0, поэтому нуль будет оцениваться как объект.
- instanceof: по цепочке прототипов, чтобы определить, имеет ли цепочка прототипов слева тот же указатель, что и прототип справа, если есть, то он равен, если нет, то не равен, и его можно использовать для прямого определения того, является ли это массив.
- Array.isArray(): инкапсулирует Object.prototype.toString.call(), чтобы определить, является ли он массивом.
- Object.prototype.toString.call(): примитивные типы данных будут иметь внутреннее свойство [[класс]] при их создании, это свойство представляет тип типа данных, и метод Object.prototype.toStrin может получить доступ к этому свойству и вернуть это внутреннее свойство (удалено [[ после es6] class]], используйте [NativeBrand], эффект более совместим).
❓❓❓Длина массива – это количество элементов, есть ли у функции длина? что такое длина?
Длина функции — это количество параметров перед первым параметром со значением по умолчанию, что также можно назвать количеством формальных параметров, которые необходимо передать.
❓❓❓const a = {}; const b = Symbol(123); const c = Symbol(123); a[b] = 'b'; a[c] = 'c'; console.log(a[b ] ]); какой результат? Почему?
Ответ: б;
Анализ: сначала посмотрите на это:
// 前置问题
const a = {};
const b = {key: 123};
const c = {key: 123};
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // c
// 题目
const a = {};
const b = Symbol(123);
const c = Symbol(123);
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // b
Давайте сначала рассмотрим нашу предварительную задачу, потому что ключ объекта может быть только строкой, поэтому любой тип данных будет по умолчанию преобразован в строку, когда он используется в качестве ключа объекта, поэтому b и c из предварительная задача преобразуется в [Object , Object], поэтому печать c не требует особых объяснений. Так почему же в заголовке печатается с? потому чтоСимвол объявляет уникальное значение, поэтому они не равны.Tipes:Объект Symbol нельзя принудительно преобразовать в строку или массив, при использовании в качестве ключа объекта он остается самим собой и не может быть получен обычными способами, его можно получить только с помощью Object.getOwnPropertySymbols (возвращает массив символов). Объекты Symbol можно преобразовать в массивы или логические значения, поэтому объекты Symbol можно использовать для логических операций, но не для математических операций.
Замыкания и цепочки областей видимости
Закрытие: функция, которая имеет доступ к переменной в области действия другой функции, что может нарушить цепочку действий. Реализуйте неупорядоченный доступ к переменным и функциям.
цепочка прицелов: при доступе к переменной интерпретатор сначала будет искать идентификатор в текущей области видимости, если он не найден, он будет искать его в родительской области видимости, пока не найдет идентификатор переменной или не окажется в родительской области видимости. .Это цепочка областей видимости.Она состоит из ряда объектов-переменных в текущей среде и среде верхнего уровня.Он обеспечивает упорядоченный доступ текущей среды выполнения к переменным и функциям, которые соответствуют правам доступа.
Tipes:Использование замыканий может разорвать цепочку действий, а цепочка областей видимости может разумно объяснить принцип замыканий.
Сессия вопросов и ответов:
❓❓❓ Почему замыкание приводит к тому, что переменная не перерабатывается и вызывает утечку памяти?
Прежде всего, мы все знаем, что замыкание — это функция, которая имеет доступ к другой переменной области видимости функции.Что это значит? То есть замыкание сохраняет ссылку на переменную внутри области видимости другой функции, так когда происходит восстановление переменной? Когда переменная входит в среду выполнения,js механизм сборки мусораОн будет помечен как "выход из окружения", а когда переменная выйдет из окружения (окончание выполнения функции), он будет помечен как "выход из окружения", а переменные, оставшиеся после выхода из окружения, - это переменные, которым нужно удалить, логически говоря,Никогда не быть выпущенным в переменную среды. Тогда закрытие остается в использовании, тогда переменная и область действия, в которой находится переменная, не будут переработаны.Есть только столько оперативной памяти js, и количество замыканий велико, и память утекает, как только оно приходит и уходит.
❓❓❓Почему замыкания могут разорвать цепочку областей видимости?
Мы должны сначала узнать, что означает прорыв? При обращении к переменной интерпретатор сначала будет искать идентификатор в текущей области видимости, если не будет найден, то будет переходить в родительскую область, чтобы найти его, пока не найдет идентификатор переменной или не окажется в родительской области. Это цепочка областей действия, состоящая из Текущая среда состоит из ряда объектов переменных в среде верхнего уровня, что обеспечивает упорядоченный доступ текущей среды выполнения к переменным и функциям, соответствующим правам доступа.Если мы не хотим обращаться по порядку, что, если я хочу получить доступ к переменным внутри функций того же уровня, что и я? В это время замыкание играет свою роль, потому что замыкание поддерживает ссылку на область действия функции, тогда область действия функции никогда не будет уничтожена, и мы можем использовать замыкание где угодно, пока замыкание было создано, поэтому не будет это разорвать цепочку области видимости?
Схема асинхронной обработки
Разработка: Callback -> Promise -> Generator -> Async/await
Tipes:Promise, Generator, Async/await появились в ECMAScript6 и более поздних версиях.
Сессия вопросов и ответов:
❓❓❓Почему существует механизм асинхронного программирования?
Прежде всего, нам нужно знать, что такое синхронизация и что такое асинхронность.Синхронизация означает, что следующая задача может быть выполнена после выполнения задачи.Асинхронность означает, что несколько задач могут выполняться одновременно. Из концепции мы можем знать, что если выполнение задачи занимает много времени, только синхронизация обязательно заблокирует выполнение кода, поэтому асинхронное программирование дляОптимизируйте операции, которые занимают много времени из-за большого объема вычислений, чтобы обеспечить стабильность системы..
❓❓❓Связь между асинхронным программированием и Eventloop и почему существует Eventloop?
Мы знаем концепцию асинхронного программирования: несколько задач выполняются одновременно, но результаты выполнения всегда имеют единую очередь для обратной связи с системой. Итак, какова роль Eventloop? Чтобы эти события происходили упорядоченно, JS-движок должен организовать порядок их выполнения. Например, время выполнения наших макрозадач и микрозадач.
❓❓❓Действительно ли обещания решают проблему ада обратных вызовов?
Что такое ад обратного вызова? Это связано с тем, что исходная схема асинхронного выполнения Callback требует большого количества вложений при выполнении сложной логики событий, что приводит к плохой читаемости кода. Действительно ли обещание решает проблему ада обратных вызовов? я считаюнисколько, потому что в сложных логических операциях непрерывная цепочка промисов также заставит людей чувствовать себя немного озадаченными, но в определенной степени код промисов более элегантен, чем обратные вызовы, поэтому промисы только смягчают ад обратных вызовов.
Каково значение функции генератора ❓❓❓?
Когда я думаю, что появление функции Generator должно позволить нам контролировать выполнение и остановку функции, мы все знаем, что состояние промиса не может быть завершено, а появление функции Generator дает нам возможность завершения .
❓❓❓ Будет ли выполняться асинхронный/ожидающий блочный код?
Роль async/await состоит в том, чтобы сделать наш асинхронный код более похожим на синхронный код, или можно сказать, что наш синхронный код может выполняться асинхронно. Так будет ли async/await блокировать выполнение кода? В конце концов, нам нужно дождаться результата кода ожидания, прежде чем мы сможем продолжить. Таким образом, async/await фактически блокирует выполнение кода, ноЕдинственное, что блокирует, — это код внутри области видимости функции, то есть код после ключевого слова await., не влияет на весь внешний контекст выполнения, потому что ключевое слово async заставит функцию вернуть объект обещания.
HTTP-запрос
Общие решения: Ajax, выборка
Tipes:Ajax и fetch являются родными API, а ajax axios и jq не находятся на одном уровне.
Сессия вопросов и ответов:
❓❓❓Зачем обновлять выборку на базе Ajax?
Ajax основан на объекте XMLHttpRequest, сама архитектура XHR недостаточно ясна, а использование Ajax слишком громоздко, а callback-функция вызовет callback hell. Обновите до извлечения, синтаксис XHR станет более лаконичным, основанным на стандартной реализации Promise и поддерживает async/await.
❓❓❓Что означают некоторые необычные коды состояния Http?
просто скажи304, когда кеш согласования сработает, он вернет 304, сообщая клиенту, что кеш можно использовать.
❓❓❓Какую роль играют куки в http запросах?
В дополнение к локальному хранению файлов cookie, поскольку http не имеет состояния, клиент не может судить об идентичности объекта на основе http в процессе связи с сервером, поэтому еще одна функция файла cookie — сохранять состояние и сообщать об этом серверу. Что сделал клиент, из-за чего куки автоматически приносятся каждый раз при отправке запроса.
однопоточный движок js
Процесс состоит из одного или нескольких потоков, а поток — это единица выполнения программы, основанная на процессе.
Сессия вопросов и ответов:
❓❓❓Почему он выполнен в виде одной темы?
Нам нужно знать, что js в основном реализует взаимодействие между пользователем и браузером и управляет домом. Итак, если js является многопоточным, то несколько потоков модифицируют один и тот же dom, то какой результат получит браузер в конце? Поэтому, чтобы избежать неожиданных сложных операций, js может быть только однопоточным. Хотя HTML5 предлагает стандарт Web Worker для многопоточности, подпотоки не могут изменять DOM и полностью контролируются основным потоком.
Общие встроенные коды ошибок
1.ReferenceError: указанная переменная не существует.
2.TypeError: Ошибка неправильного типа данных.
3.RangeError: значение данных находится за пределами допустимого диапазона (за пределами).
4.4.SyntaxError: синтаксическая ошибка
Связь
# Во время интервью интервьюер спросил меня о кроссдоменности, и я снова узнал об этом
Эпилог
Я пишу уже давно, и в процессе есть много вещей, которые, как мне казалось, я хорошо усвоил раньше, и на самом деле выразил это только тогда, когда обнаружил, что знаю очень мало. В статье не было написано тех вещей, о которых все знали на первый взгляд, по крайней мере я не знал, с чем сталкивался раньше, и это считалось проверкой для себя заполнить пробелы, ха-ха. Если в статье есть ошибки или непонятки, надеюсь, большие ребята укажут, 🙏 Спасибо. Студенты, у которых есть краткое изложение базовых знаний, очень надеются, что они смогут обсудить и научиться реагировать вместе, вы можете добавить меня vx lp_18714, а также попросить онлайн-босса реагирования показать мне, что реагировать слишком сложно. 😭
Наконец, я желаю вам всего наилучшего в учебе и успехах, и успешной карьеры! 🎆🎆🎆