Функция разницы стрелок и нормальная функция: фронтальное интервью серии ES6

ECMAScript 6

Основное использование

стрелочная функция

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, команда не может использовать выход и, следовательно, не может функционировать как функцию генератора стрелки.

постскриптум

В последнее время, так как я готовлюсь к интервью, я планирую организовать точки знаний, чтобы облегчить закрепление и закрепление знаний.Если есть какие-либо неточности в тексте, пожалуйста, покритикуйте и исправьте~