Как реализовать необязательные скобки во время вызова функции?(функция перегрузки) - PullRequest
0 голосов
/ 21 сентября 2010

Я думаю, что это невозможно, но я бы хотел, чтобы f и f() делали то же самое.

   var f = function(str){ console.log(str||'foo'); }();

   f;                      // wanted output: 'foo'
   f();                    // wanted output: 'foo'
   f('bar');               // wanted output: 'bar'

Поскольку f больше не является определением функции,f() кажется невозможным, но, может быть, я что-то упустил.Есть предложения?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

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

Значение выражения f() является результатом вызова функции, тогда как значение f является самой функцией (и f.tostring() если вы отобразите это).

1 голос
/ 21 сентября 2010

Не возможно.Скобки показывают, как javascript знает, что вы хотите, чтобы объект метода был выполнен.

0 голосов
/ 21 сентября 2010

Удалите () из вашего определения.

var f = function(str){ console.log(str||'foo'); };

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

...