Здесь происходит то, что ES6 позволяет вам использовать сокращенный синтаксис для определений функций.Это: const obj = { method() {} }
в основном переводится как const obj = { method: function() {} }
.
Итак, когда вы используете этот фрагмент var a = {ac: 10, function(){console.log("hi")}}
, вы говорите браузеру, что function
не является зарезервированным словом для вас внутри этого объекта,скорее имя свойства, которое вы хотите использовать, так что вы получите объект, который имеет метод с именем function
.
Кстати, вы должны избегать этого в будущем, не используйтезарезервированные ключевые слова для другой цели.
Во втором фрагменте var a = {ac: 10, function hi(){console.log("hi")}}
происходит то, что вы пытаетесь получить объявление функции (function hi(){console.log("hi")}
) внутри объекта, и это синтаксическая ошибка.Присвоив функции имя, вы изменили сокращенный синтаксис для объявлений методов внутри объекта на определение функции.Если вы используете правильное наименование (избегая зарезервированных слов) для этого сокращенного синтаксиса или объявляете функцию снаружи и ссылаетесь на нее внутри объекта, у вас не должно возникнуть проблем.