Разница между двумя способами вызова функции в coffeescript (в Rails)

Может ли кто-нибудь объяснить тонкие различия между двумя следующими синтаксисами?

(Я использую рельсы и турболинки со своим coffeescript)

1) Я столкнулся с этим рекомендуемым способом вызова кода.

windowReady = ->
  customFunction = ->
    ...code...

  jQuery ($) -> 
    ...code...

$(window).load(windowReady);
$(window).on('page:load', windowReady);

2) Я также использовал следующий синтаксис без заметных различий в поведении.

(->
  customFunction = ->
    ...code...

  jQuery ($) -> 
    ...code...
).call this

На какие тонкие различия следует обращать внимание при использовании этих двух способов и как их устранить? Один предпочтительнее другого?


person ahnbizcad    schedule 26.06.2014    source источник
comment
Вы используете TurboLinks?   -  person mu is too short    schedule 27.06.2014
comment
@mu слишком короткий, да, сэр. Если есть дополнительные различия, независимо от того, используются ли турболинки или нет, мы также будем очень признательны за их освещение.   -  person ahnbizcad    schedule 27.06.2014
comment
Этот ответ может быть полезен. TurboLinks запускает загрузку только один раз, после чего вы получаете page:load событий, когда TurboLinks переключает страницы. Если, конечно, у вас нет плагина, исправляющего $(document).ready(...).   -  person mu is too short    schedule 27.06.2014
comment
Похоже, что другой синтаксис также ведет себя так же   -  person ahnbizcad    schedule 27.06.2014
comment
Единственное функциональное отличие от версии windowReady заключается в том, что в ней использовалась именованная функция для привязки функциональности к двум отдельным событиям.   -  person mu is too short    schedule 27.06.2014


Ответы (1)


Это что-то вроде сравнения яблок с апельсинами.

Очевидно, что тело windowReady и анонимной функции одинаковы, но первая версия использует библиотеку JQuery (и, я думаю, TurboLinks), а вторая версия (за пределами самого метода) просто JS/CS.

Как написано, вторая версия выполнит анонимную функцию ровно один раз — когда файл JS/CS будет загружен и выполнен в первый раз. Первая версия будет выполнять функцию windowReady каждый раз, когда запускается событие page:load.

person Lela Jennings    schedule 11.07.2016