为什么要在 $self 和 $body 前加上美元符号?$self 和 self 是否相同?

89

我正在尝试通过理解他人的代码来学习jQuery。我遇到了这个问题:

jQuery.fn.myFunc = function(options, callback) {

//stuff

  jQuery(this)[settings.event](function(e) {
    var self = this,
    $self = jQuery( this ),
    $body = jQuery( "body" );
     //etc.
  }

//more stuff

}

我的理解是$代表jQuery对象。那么为什么要将$$self$body放在一起呢?而且self$self是相同的吗?

5个回答

235

$self$没有什么关系,在这种情况下$是jQuery的别名。有些人喜欢将美元符号与变量一起使用,以区分普通变量和jQuery对象。

例子:

var self = 'some string';
var $self = 'another string';

这被声明为两个不同的变量。这就像在私有变量前加下划线。

一个有些流行的模式是:

var foo = 'some string';
var $foo = $('.foo');

这样,你就知道在代码的后续部分,$foo是一个已缓存的jQuery对象。


13
非常清楚。我感谢你解释为什么有人会使用$var约定。 - dnagirl
你如何处理以 $ 开头的变量,用于 jQuery 变量和 JSLint? - Jeremy D

30

这是纯JavaScript。

$ 没有什么特别之处,它只是一个可以用于变量名的字符。

var $ = 1;
var $$ = 2;
alert($ + $$);

jQuery只是将其核心函数分配给一个名为$的变量。您的代码将this分配给名为self的局部变量,并将使用this作为参数调用jQuery的结果分配给名为$self的全局变量。

虽然$self$self都有类似的名称,但它们是不同的变量,这使得代码看起来丑陋、混乱、难以理解。


1
口味因人而异,但我并不认为它丑陋。美元符号长期以来一直用于表示$STRINGS和其他特殊变量。我肯定会采用这种约定。 - I. J. Kennedy

9
不,它绝对不是。这只是另一个变量名。你所说的$()实际上是jQuery核心函数。而$self只是一个变量。你甚至可以将其重命名为foo,这并不会改变任何东西。在Javascript标识符中,$(和_)是合法字符。
通常这样做的原因只是一些代码约定或避免与反向关键字冲突。我经常使用它来代替$this,如下所示:
var $this = $(this);

7

self和$self并不相同。前者是由"this"指向的对象,而后者是一个jQuery对象,其"作用域"是由"this"指向的对象。同样地,$body并不是body DOM元素,而是其作用域为body元素的jQuery对象。


2
在变量名前使用美元符号是从匈牙利标记的概念中引入的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接