Основное использование
стрелочная функция
let sum = (a, b) => {
return a + b;
}
Обычная функция
var sum = function (a, b){
return a + b;
}
разница
Я читал статью Ruan Yifeng es6 до того, как эта точка знаний была упомянута, но вчера меня спросили в интервью, и я ответил только на это, поэтому я быстро нашел время, чтобы разобраться в точках знаний, проверить пробелы и заполнить пробелы , и начните текст ниже.
1, ЭТО указывает
На этот момент следует обратить особое внимание, и это то, на что интервьюер обращает наибольшее внимание во время интервью.this стрелочной функции указывает на this родительской области, а значение this определяется путем поиска по цепочке областей видимости, то есть это this контекста, который указывает на объект, который его определяет, а не тот, где он используется.Объект, нормальная функция ссылается на ее непосредственный вызывающий объект.
(1) Эта точка обычных функций может относиться кЭто использование js Ruan YifengКогда я слышу ваш вопрос об этом, интервьюер может задать вам несколько дополнительных вопросов об этом, как изменить направление этого, например, метод привязки, а затем разрешить вам реализовать привязку. Короче говоря, есть действительно много вопросов к спроси. .
(2) это стрелочная функция
let obj = {
a: 1,
b: () => {
console.log(this.a); // undefined
},
c: function() {
console.log(this.a); // 1
},
};
obj.b();
obj.c();
Функция стрелки не имеет этого, ее это унаследовано, и по умолчанию он указывает на объект, когда он был определен, что мы называем объектом Host, а не объектом, который его выполняет. Здесь через obj.b (), в это время окно объекта, указанное на него, не имеет на нем, поэтому он возвращает undefined. Через obj.c (), это указывает на его прямой абонент, который является OBJ, поэтому 1 возвращается.
var obj = {
a:1,
print(){
setTimeout(
function(){console.log(this.a);},
1000
);
}
};
obj.print();//undefined
Функция таймера, потому что нет объекта хоста по умолчанию, вызов функции setTimeout не является каким-либо объектом, это точка для объекта окна по умолчанию, естественный вывод не определен.
var obj = {
a:1,
print(){
setTimeout(
() => { console.log(this.a); },
1000
);
}
};
obj.print();// 1
this функции стрелки относится к объекту, который ее определяет, поэтому this относится к объекту obj, поэтому obj.a действительно должен выводить 1. ⚠️ Наконец, обратите внимание, что мы всегда подчеркивали, что стрелочные функции не имеют this в предыдущей статье, поэтому мы не можем использовать call(), apply(), bind() для изменения указателя this.
2. Нельзя использовать как конструктор
Его нельзя использовать в качестве конструктора. Использование новой команды в качестве конструктора сообщит об ошибке. Нет такой вещи, как создание прототипа. Нет свойства прототипа, и к свойству прототипа нельзя получить доступ через супер, и новая цель не может использоваться.
function f1(arr) {
console.log(arguments);
}
f1([1,2,3]); // [1,2,3]
let f2 = (arr) => {
console.log(arguments);
}
f2([1,3,9]); //Uncaught ReferenceError: arguments is not defined
let f3 = (...arr) => {
console.log(arr);
}
f3([1,4,5]); // [1,4,5]
4, команда не может использовать выход и, следовательно, не может функционировать как функцию генератора стрелки.
постскриптум
В последнее время, так как я готовлюсь к интервью, я планирую организовать точки знаний, чтобы облегчить закрепление и закрепление знаний.Если есть какие-либо неточности в тексте, пожалуйста, покритикуйте и исправьте~