2015-12-21 3 views
2

Возможно, это не самый лучший вопрос, но у меня есть сомнения здесь.javascript anonymous function variable assignement

Есть ли разница написания этого:

var myFunction = function myFunction() {}; 
myFunction.instance = null; 

и это:

var myFunction = function() {}; 
myFunction.instance = null; 

редактировать: внимательно прочитайте, пожалуйста, это не дубликат этого var functionName = function() {} vs function functionName() {} Ссылку выше, объясняющей Подъемы, здесь речь идет о присвоении двух поднятых функций, один анонимный, один нет.

+0

Вы действительно обеспокоены 'myFunction.instance = NULL;' или просто определение функции – Tushar

+0

@Tushar OP касается 'функции MYFUNCTION() {}' 'против функции() {}' –

+0

@BhojendraNepal и это не обманывает упомянутый Q. – Tushar

ответ

5

Нет. Нет разницы .

В обоих случаях создается объект функции (через выражение функции), назначенный переменной, а затем мутированный через присвоение свойства.

Единственным отличием является одна функция имеет имя, присвоенное, который может оказаться полезным: см myFunction.name, myFunction.toString(), или доступ к myFunction из внутри функции сферы. Поскольку это было выражение функции (в отличие от объявления функции), имя не имеет отношения к переменным в определяющей области; Предостережения для устаревших браузеров покрыты в другом месте.

+0

Вы в основном правы, но говорите «Нет. Нет разницы», а затем «Единственное различие» немного странно. Различия заключаются в следующем: (1) наличие названных функций отлично подходит для отладки, но (2) они могут привести к ошибкам в старых браузерах. Второй из них очень важен (например: http://stackoverflow.com/a/8548848/2407870). –

+0

Да, это не относится к большинству вещей, но ОП не задавал особых проблем, о которых он заботился, поэтому он может быть уместным. –

+0

это было очень ясно, не тратьте время на такие вещи действительно = D спасибо –

1

Не совсем.

Основное различие будет размер вашего кода (один оператор быть больше), так как хранить функции в переменную игнорирует фактическое имя функции:

var a = function b() {}; 
console.log(b); // Uncaught ReferenceError: b is not defined(…) 

Причина, по которой появляется то же самое в вашем случае является что вы используете один и тот же имя переменной для обоих, и, таким образом, переменная будет указывать на функцию

другая разница была бы значения, возвращаемые из myFunction.toString() и myFunction.name как pointed out by user2864740

var a = function b() {}; 
console.log(a.toString()); // "function b() {}" 
var c = function() {}; 
console.log(c.toString()); // "function() {}" 
+0

nothign другие отличия чем? =/ –

+0

спасибо, ясный ответ –

+0

@ FrançoisRichard без проблем, рад помочь. – nem035

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