В чем отличие объявления этих двух функций?
Как давно в JS можно не писать function в первом примере?
Ключевое слово function можно опускать в определенных ситуациях:let bar = {
    test: 'A',
    foo() {
        console.log(this.test);
    }
}

bar.foo(); // A

class Bar {
    constructor() {
        this.test = 'B';
    }
    foo() {
        console.log(this.test);
    }
}

(new Bar()).foo(); // B
Разумеется для старых браузеров нужен Babel. В остальных случаях запись вида test(){} вызовет ошибку Uncaught SyntaxError: Unexpected token.
Первая запись вообще не сработает - ошибка синтаксиса.
Вторая запись - это стрелочные функции.