1

Я использую 64-битную версию Google Chrome версии 52. Я узнал, что если я использую выражение анонимной функции ex.Анонимное выражение функции в Google Chrome

// Anonymous function expression 
var expressionFunc = function(){ 
    return true; 
}; 

Переменная expressionFunc проведет назначенную анонимную функцию, Но это также добавляет имя свойства expressionFunc этой функции. Так что если я сделаю expressionFunc.name в консоли, Он даст мне expressionFunc.

Из того, что я знаю, это анонимное выражение функции должно оставаться анонимным, И функция, на которую ссылается переменная, не должна содержать имя переменной в свойстве имени функции.

Почему хром присваивает свойство имени анонимной функции?

+0

Я понимаю, что вы не создаете анонимную функцию здесь, вы просто объявляете функцию с другим синтаксисом. Счастлив для тех, кто знает стандарт, немного больше для разработки. Анонимная функция будет больше похожа на (function() {alert (true);})(); –

+1

Поведение в Firefox отличается, что говорит о том, что это не ясно. –

+0

Это называется выражением анонимной функции inline. эта функция не имеет имени, так что это анонимная встроенная функция, и присвоение переменной делает ее встроенным анонимным выражением функции. – RuvenGam

ответ

0

Эта страница:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/name

говорит, что это

Браузеры, которые реализуют функции ES6 можно вывести фамилию анонимной функции от его синтаксической позиции. Например:

var f = function() {}; 
console.log(f.name); // "f" 

Там нет особых объяснений на этой странице.

Эта страница

http://www.2ality.com/2015/09/function-names-es6.html

Говорит это

Что касается имен, стрелка функции, как анонимные функции выражения:

 const func =() => {}; 
    console.log(func.name); // func 

С этого момента, когда вы видите анонимное выражение функции, вы можете предположить, что функция стрелок работает одинаково.

Ответ на вопрос https://stackoverflow.com/a/37488652/1048572 (ссылка на @bergi) довольно подробно и указывает на источник в спецификации.

+0

Обратите внимание, что браузеры сделали это вывода с длинными трассировками стека, только с ES6 они делают его доступным как свойство и устанавливают правила для того, когда это делать. – Bergi

Смежные вопросы