определение функции с помощью функции var vs - PullRequest
0 голосов
/ 25 мая 2019

экспортироваться:

var MyFunction = func(){}
function MyFunction func(){}

неэкспортируемый:

var myFunction = func(){}
function myFunction func(){}

Я прочитал var functionName = function () {} против функции functionName () {} , это про Javascript.

Причина, по которой я рассматриваю возможность перехода с function myFunction func(){} на var myFunction = func(){}, заключается в том, что более поздняя версия облегчает мне проведение модульного теста.

Поэтому мне интересно, есть ли что-то, на что мне нужно обратить внимание, прежде чем вносить это изменение.

1 Ответ

0 голосов
/ 27 мая 2019

Главное различие между этими двумя формами заключается в том, что они отличаются не только синтаксисом, но и семантикой :

  • «Нормальная» форма, в которой используется func name (...)form создает обычную именованную функцию.
  • То, что вы называете «создать функцию, используя var», фактически создает так называемую анонимную функцию и присваивает ее значение переменной.

Разница в том, что в Go анонимные функции ведут себя как замыкания, , а обычные функции - нет.

Закрытие - это функция, которая "захватывает" любые переменные из своей внешней лексической области видимости, которыеиспользуется в теле функции (хотя она не затеняется локальными переменными и аргументами функции).

Различие может быть неочевидным, когда любая из форм используется на верхнем уровне пакета, то есть вне какой-либотело функции, - поскольку внешняя область в этом случае является глобальными переменными пакета, но внутри других функций различие очевидно:«нормальная» форма просто не может быть использована.

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

Тем не менее, если мы говорим о коде верхнего уровня, предложение, предложенное Flimzy, справедливо: в рабочем коде Go наличие глобальных переменных, содержащих значения функций, - это запах кода с до , что может быть доказано иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...