Какой смысл в выражениях функций, они кажутся бесполезными - PullRequest
0 голосов
/ 19 апреля 2020

Извините, если это дубликат, я прочитал несколько постов с этим вопросом, но не нашел удовлетворительного ответа. Я новичок в JS, я работал с C и Java. Недавно я узнал о функциональных выражениях, которые, насколько я понимаю, являются объявлениями анонимных функций, которые присваиваются некоторой константной переменной. Я не понимаю, какова мотивация этого / какова возможная польза этого / как это могло бы сделать то, что вы не могли просто сделать с объявлением функции. например

const example = function (input){
   return 'Am I useless?:' + input;
}

console.log(example('Idk'));

Так же, как и вызов объявленной функции с той же переменной, но вместо этого я использую это имя переменной (example), что также делает функцию anonymous псевдо-функцией анонимный, так как у него есть имя, на которое он может ссылаться.

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

Я действительно ценю помощь / разъяснения.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

TL; DR: Нет, выражения функций не бесполезны.


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

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

Следующие коды идентичны (ОК, не полностью идентичны, они отличаются по своим правилам подъема):

function foo(bar){
  return 'baz'
}
//Function declarations create variables like how `var` does
var foo = function foo(bar){
  return 'baz'
}

Однако, выражения функций становятся удобными, когда вы не хотите сохранять функцию в var ⁠iable.

Примеры включают:

  • Константа функции:

    const foo = function foo(bar){
      return 'baz'
    }
    
  • Функции с областью действия блока:

    {
      let foo = function foo(bar){
        return 'baz'
      }
    }
    
  • IIFEs (Сразу же вызвано Выражение функции с ):

    (function (bar){
      //Here we have an encapsulated local scope and the ability to return things
      return 'baz'
    })('foo')
    
  • Обратные вызовы:

    asyncFn(function (){
      console.log('Done!')
    })
    
  • Хранение в объектах:

    foo[2].bar = function (){
      return 'baz'
    }
    
  • Присвоение ранее объявленным переменным:

    let foo = null
    console.log(foo)
    foo = function foo(bar){
      return 'baz'
    }
    

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


Я точно не знаю, почему Code Academy предпочитает использовать выражения функций в y в нашем случае, но я думаю, что дело в ключевом слове const, как оно есть:

  • Блок-область
  • Константа
  • Ограничивает странные причуды, которые var (и объявления функций) позволят
  • Поднимается с временной мертвой зоной (доступ к ней невозможен до ее объявления)
0 голосов
/ 19 апреля 2020

Функции являются первоклассными объектами в JavaScript. В фонах программирования из Java или C это не так.

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

Javascript - это безумие, если вы пришли из "правильного" языка программирования! :) Посмотрите, что говорит Брайан Леру, чтобы развлечься. https://www.youtube.com/watch?v=et8xNAc2ic8

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