CoffeeScript 中 $(document).on 和 ($ document).on 的区别?

Difference between $(document).on and ($ document).on in CoffeeScript?

我的朋友在他的 CoffeeScript 代码中使用 ($ document).on。这与通常的 $(document).on 有何不同?如果有,有何不同?

在 CoffeeScript 中,调用带有参数的函数不需要括号。

例如:

console.log("Hello") // Hello
console.log "Hello"  // Hello

所以,考虑一下这些是等价的:

$document = $(document)
$document = $ document
$document = ($ document)

但是,在某些情况下,括号对于消除歧义是必要的。

例如,您希望在 $() 函数的 return 上调用 on 函数:

$(document).on() // on function called on the return of $() function

但这不会按预期工作:

$ document.on() // $() function called with document.on() return!

因此,为了强制对 $() 函数的结果调用 on 函数,我们添加括号:

($ document).on() // on function called on the return of $() function

请注意,根据 CoffeeScript style guide

The function grouping style is not recommended.

所以建议您的朋友停止使用它:)