【发布时间】:2012-11-21 22:53:57
【问题描述】:
在带有jQuery的CoffeeScript中,下面的语句有什么不同吗?
jQuery ($) ->
jQuery ->
$ - >
【问题讨论】:
标签: jquery coffeescript
在带有jQuery的CoffeeScript中,下面的语句有什么不同吗?
jQuery ($) ->
jQuery ->
$ - >
【问题讨论】:
标签: jquery coffeescript
第一个与其他两个不同,就像在纯 JavaScript 中一样。在那里,您使用全局名称“jQuery”为“DOM 就绪”事件注册事件处理程序,同时确保快捷方式 $ 链接到 jQuery。其他两种样式不这样做 - 因此,在事件处理程序的本地范围内,$ 将具有它外部的任何值。
【讨论】:
重要的是要知道$(handler) 与$(document).ready(handler) 相同,您问题中的所有三个语句基本上都是为jQuery.ready 函数设置处理程序。
除此之外,jQuery 会将一个变量传递给提供给 ready 函数的处理程序,该函数是 jQuery 对象。因此,在您的第一个示例中,您的处理程序只是利用这一点并(重新)将$ 设置为与jQuery 相同。您的处理程序不需要接受 jQuery 传递的变量,这就是为什么您的其他两个处理程序不接受任何参数是可以的。
一般只有在有另一个全局使用$的库(例如jQuery)时才需要这样做。
【讨论】:
默认情况下,jQuery 创建一个名为jQuery 的全局对象和一个名为$ 的全局别名。即window.$ = window.jQuery。这就是为什么您可能会看到引用两者的不同文档的原因。某些其他库也喜欢使用$ 作为他们的名字。这就是 jQuery 提供 noConflict mode 的原因,它可以让您将 $ 重置为之前的值。
所以给你一个简短的回答:你应该更喜欢 $ -> 除非你正在使用 noConflict。
这里是 jQuery 函数的官方文档,供参考,当它被赋予一个函数作为参数时:http://api.jquery.com/jQuery/#jQuery3
【讨论】: