Заучивайте по 5 уроков каждый день, обязательно заучивайте и запоминайте, надеюсь немного поможет фронтенду в поиске работы
1. Объясните переменное продвижение
-
Все объявления поднимаются на самый верх области видимости.
-
Объявления функций имеют более высокий приоритет, чем объявления переменных, и объявления функций поднимаются вместе с частями определения функции.
Например:
(1) Вариативное продвижение
console.log(a); //undefined
var a = 123;
Потому что объявление переменной a упоминается в верхней части области видимости. Приведенный выше код должен выглядеть так после компиляции
var a;
console.log(a)
a = 123
//所以输出内容为 undeifend
(2) Продвижение функции
Есть два способа объявить именованную функцию: 1. Объявление функции 2. Функциональный литерал
//函数声明式
function bar () {}
//变量形式声明;
var foo = function () {}
Объявление функциональной переменной такое же, как и обычная переменная, но только переменная без значения.
Феномен продвижения объявления функции немного отличается от продвижения переменной.Объявление функции будет перемещено в начало области, а содержимое объявления будет перемещено наверх вместе.
См. пример:
bar()
var bar = function() {
console.log(1);
}
// 报错:TypeError: bar is not a function
bar()
function bar() {
console.log(1);
}
//输出结果1
2. Какие новые функции были добавлены в ES6+
-
объявить let / const
-
присваивание деструктуризации
-
class / extend: Объявление класса и наследование -
Set / Map: новая структура данных -
стрелочная функция
-
promise
-
async/await
-
расширение массива
-
расширение объекта
3. Разница между let и const
-
let / const: область действия на уровне блоков, без продвижения переменных, временная мертвая зона, без повторных объявлений -
const: объявить константы и не могут быть изменены (базовые типы не могут быть изменены, ссылочные типы, такие как объекты и массивы, могут быть изменены)
4. Каково использование async и await?
асинхронная функция - это функция генератора синтаксического сахара, асинхронная функция всегда возвращает обещание, ожидание возможно для достижения функции «ожидания», вызов асинхронного / ожидающегоИдеальное решение для асинхронного программирования, то есть писать асинхронный код в синхронной форме и может более элегантно реализовать последовательное выполнение асинхронного кода и предоставлять более точную информацию об ошибке при возникновении асинхронной ошибки.
5. Понимание обещаний, рукописные обещания или вопросы, как решить ад обратного звонка
Так называемый Promise — это просто контейнер, содержащий результат события (обычно асинхронной операции), которое завершится в будущем. Синтаксически Promise — это объект, из которого можно получить сообщение для асинхронной операции. Обещания предоставляют унифицированный API, и различные асинхронные операции могут обрабатываться одинаково.
Есть три состояния:
- в ожидании
- завершено (решено)
- отклоненный
Promiseизнедостаток:
- Во-первых, нет возможности отменить
Promise, как только он будет создан, он будет выполнен немедленно и не может быть отменен на полпути. - Во-вторых, если вы не установите функцию обратного вызова,
PromiseОшибки, возникающие внутри, не будут отражаться снаружи. - В-третьих, когда в
pendingКогда он находится в состоянии, невозможно узнать, на каком этапе он находится в данный момент (только что начат или вот-вот завершится).
Какая проблема была решена:
PromiseПоявление решает предыдущеепроблема с обратным вызовом,а такжеPromiseРеализованы связанные вызовы, то есть каждый вызовthenЗатем он возвращаетPromise, и это совершенно новыйPromise. Потому чтоPromiseСостояние неизменно. если тыthenиспользуется вreturn,Такreturnзначение будетPromise .resolveУпаковка.
Рукописное обещание [ключевой момент]
//newPromise.js
const PENDING = 'pending'
const FULFILLED = 'fulfilled'
const REJECTED = 'rejected'
class NewPromise {
constructor(executor) {
executor(this.resolve,this.reject)
}
//promise状态
status = PENDING
value = undefined
reason = undefined
//值默认没有
resolve = value => {
//如果状态不是等待,阻止程序向下执行
if(this.status !== PENDING)return
this.status = FULFILLED
this.value = value
}
//使用箭头函数的原因:直接调用一个普通函数,函数里面的this指向是undefined的
reject = reason => {
if(this.status !== PENDING)return
//将状态更改为失败
this.status = REJECTED
this.reason = reason
}
//判断promise的状态,返回回调函数,需要传递value和reason
then(successCallback,failCallback){
//判断状态
if(this.status === FULFILLED){
successCallback(this.value)
}else if(this.status === REJECTED){
failCallback(this.reason)
}
}
}
module.exports = NewPromise
Обещание, написанное пользователем сети по имени «Сетка», давайте посмотрим, что с ним не так.
class promise {
constructor(fn) {
this.state = 'pending'
this.resolveCbs = []
this.rejectCbs = []
this.resolve = this.resolve.bind(this)
this.reject = this.reject.bind(this)
fn(this.resolve, this.reject)
}
resolve(data) {
this.successData = data
this.state = 'resolve'
this.resolveCbs.forEach(cb => {
cb && cb(this.successData)
})
}
reject(data) {
this.failData = data
this.state = 'reject'
this.rejectCbs.forEach(cb => {
cb && cb(this.failData)
})
}
then(cb) {
cb && this.resolveCbs.push(cb)
return this
}
catch(cb) {
cb && this.rejectCbs.push(cb)
return this
}
}
В соответствии с первоначальным намерением помочь фронтенду в поиске работы, я узнал из статей многих больших парней в Наггетс, Если есть какие-либо нарушения, пожалуйста, дайте мне знать