2012-03-13 2 views
2

Coffeescript предоставляет свободу для установки или пропуска круглых скобок для вызовов функций. КакКофейные скобки для вызова функции

alert 'Hi folks' 
alert ('Hi folks') 

равные.

Теперь я задаюсь вопросом, возможно, из-за недостаточного опыта работы с coffeescript, его синтаксиса и его цели, чтобы все было просто, если можно добавить круглые скобки для оператора вроде следующего. Я знаю, что они не нужны.

define (require) -> 
    return 'goodbye' 

Edit: Если я применяю возможность установить скобки таким же образом, как и для предупреждения заявления, чем я предполагаю, этот синтаксис не имеет никакого значения для конечных JS.

define ((require) -> 
    return 'goodbye' 
) 
+0

Вы можете добавить последнее заявление с Скобки добавил так, как вы хотите? Я не понимаю, чего вы пытаетесь достичь. –

ответ

3
define (require) -> 
    return 'goodbye' 

будет эквивалентен коду JavaScript

define(function(require) { return 'goodbye' }) 

То есть, вызов функции define с функцией в качестве первого (и единственного) аргумента. Вероятно, это не то, что вы ожидали от фрагмента, когда вы задавали свой вопрос.

Что-то, что я нашел очень полезным, когда я играл с CoffeeScript, заключалось в том, чтобы попробовать в интерактивном диалоге «попробуйте CoffeeScript» на the CoffeeScript website. Это позволяет вам увидеть JavaScript, с которым скомпилирован данный фрагмент, и сразу увидеть, какой эффект, например. добавление скобок или изменение отступов в результирующем коде JavaScript. Я определенно рекомендую это сделать. :-)

Редактировать, чтобы отразить редактирования в вопросе:

Да, добавляя скобки функции ((require) -> return 'goodbye') является действительным, и не изменяет поведение. Обратите внимание, однако, что «foo (bar)» и «foo(bar)» по-разному анализируется; в первом в скобках обозначается приоритет (приоритет, «обычные скобки»), а в последнем они являются круглыми скобками функций.

«foo bar», «foo(bar)», «foo (bar)» все делают то же самое, но в то время как «foo bar, baz» и «foo(bar, baz)» работают нормально, «foo (bar, baz)» ошибка синтаксиса.

+0

Thx. На самом деле это то, что я ищу. Мне просто любопытно, если его можно обернуть анонимную функцию, как если бы это был простой параметр. – SunnyRed

+0

Thx для вашего обновления + дополнительная информация.Итак, чтобы обобщить, в таких случаях, как выше, круглые скобки имеют влияние на конечный результат: 'define ((function (require) {return 'goodbye';}));'. В то время как с простым параметром - как в предупреждении - они этого не делают? – SunnyRed

+0

@SunnyRed: они оказывают такое же влияние на предупреждение, как и при определении. Это просто «круглые скобки», а не «круглые скобки для вызова функций». Если между функцией и левой скобкой нет пробелов, это интерпретируется как часть синтаксиса вызова функции. – FireFly

1

Да, вы можете заключить анонимную функцию в круглые скобки.

Я использовал этот простой скрипт.

test.coffee

define = (func) -> func() 

console.log define ((require) -> 
    return 'goodbye' 
) 

выход:

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