【问题标题】:how does $ sign in "jQuery(function($){...}" refer to jQuery?“jQuery(function($){...}” 中的 $ 是如何引用 jQuery 的?
【发布时间】:2012-10-17 17:38:57
【问题描述】:

下面,它说 $ 符号是指 jQuery。我需要帮助了解如何操作?

jQuery(function($){
    // Here `$` refers to jQuery
});

【问题讨论】:

  • 只看最底层的源码code.jquery.com/jquery-1.8.2.js
  • 什么意思?它是如何在幕后完成的,或者你如何使用它?
  • 因为jQuery会将jQuery作为参数传递给所提供的函数,而该参数称为$,因此引用了jQuery。
  • downvotes 对我来说似乎相当苛刻 - 在我试图找到 jQuery 将自己作为第一个参数传递给 document.ready 处理程序的答案之前,我并不了解自己。

标签: javascript jquery dollar-sign


【解决方案1】:

当你像这样向 jQuery 传递函数时:

jQuery(function() {
    ...
});

这与使用 jQuery 的“文档就绪”处理程序相同:

jQuery(document).ready(function() {
    ...
});

然而,传递给该函数的 参数 实际上是全局 jQuery 对象本身 - 只是大多数此类处理程序从不使用该参数。因此 real 签名是这样的:

jQuery(document).ready(function($) {
    ...
});

因此,在该函数中,$ 是全局 jQuery 对象的本地别名。变量名可以任意命名,但$jQuery 的常用别名,默认全局别名,除非您调用jQuery.noConflict()

这在http://api.jquery.com/ready/的“为 jQuery 命名空间起别名”段落中有更详细的描述

【讨论】:

  • alnitak,我们可以使用jQuery(document).ready(function(anyname){...});,对吧?这里anyname=jquery,然后。
  • @burhan 是的,这是正确的,根据我的倒数第二段,但仅在该函数中
  • 也就是说,它将 jquery 对象作为参数传递给函数。不是“this
  • 如何在另一个函数中改变$的值?
  • 通过将这些函数嵌套在这个函数中,或者使用jQuery.noConflict()。这取决于您要达到的目标。
【解决方案2】:

该函数是所谓的异名函数,jQuery 使用第一个参数 this 运行该异名函数。

所以只是为了理解它是这样的:

function jQuery(xx) {
    xx(this);
}

【讨论】:

  • 这个 sn-p 会显示行为,但是太简化了,恐怕没有任何意义。
  • 好吧,你们两个都是对的,我只是想指出为什么 $ 是一个 jQuery 对象。如果我猜对了,那么 burhan 不知道异名函数的概念。
【解决方案3】:

只是一个例子,向你展示它是如何可能的

function externalLibrary(b) {
    if(typeof b === 'function') {
        b(externalLibrary);
    }else {
        // other stuff
    }

}

var myFunc = function(aliasOfExternalLibrary) {
    // here aliasOfExternalLibrary is a reference to externalLibrary
}
externalLibrary( myFunc );

jQuery do the same(在一个更复杂的系统中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多