$ this和$(this)在jQuery中
我已经看到了一些关于$(this) vs $this在jQuery中的讨论,而且它们对我有意义。  (请参阅这里的讨论为例。) 
但是从jQuery网站插件教程中可以看出,链式连接是如何工作的呢?
 (function ($) { $.fn.lockDimensions = function (type) { return this.each(function () { var $this = $(this); if (!type || type == 'width') { $this.width($this.width()); } if (!type || type == 'height') { $this.height($this.height()); } }); }; })(jQuery); 
  $this代表了什么? 就在我想我已经想通了… 
  $this只是一个普通的variables。  $字符是variables名称中的有效字符,所以$this与其他非保留variables名称的作用相同。 它在function上与调用variablesJellyBean相同。 
 你通常使用var $this = $(this); 避免创build一个新的jQuery对象。 在下面的代码中,您只能创build一个对象而不是两个/四个。 这与连锁性完全无关。 
 你也可以把它叫做$thi$或其他的东西(不要用后者,这很丑陋:p),因为$就像是一个简单的JavaScript字符,就像az一样。 
  this在JavaScript(通常)表示对调用当前函数的对象的引用。  jQuery试图在.each()循环结构中使用this更友好的用户,这个概念有些模糊。 
  在 .each() , this表示.lockDimensions被调用的jQuery对象。 
  在 .each() 里面它表示当前迭代的DOM对象。 
 通常,将$(this)存储在本地variables中的目的是为了防止您多次调用jQuery函数$() ,cachingjQuery,如果您必须多次使用它, this将有助于提高效率。 
  $是一个有效的variables名称字符,通常用来作为variables名称的第一个字符,以使程序员已经是jQuery对象(并且具有可用的关联方法/属性)。 
 这个问题实际上与链式能力无关,但为了保持链式能力,您应该返回this以便可以添加其他函数调用,并在这些调用中保留这个函数的含义。 
你可能忽略了这一行:
 var $this = $(this); 
 在这里, $this只是一个variables,它保存了$(this)的值。 您可以与$(this)交换使用它,并且您不会一遍又一遍地进行相同的查找。 
  $this只是一个局部variables,命名这种方式来提醒你$(this) 。 它节省了创buildjQuery版本的工作,你可以多次使用它。 
  $this只是jQuery包装的本地副本。 
从长远来看,保留一个本地副本,而不是每次需要包装时都更有效率。
  $this = $(this)是一种cachingjQuery对象的方法。 每次运行jQuery函数的代价都很高,因此存储输出结果可以让你重复使用select器,而无需再次调用jQuery函数。 
 它只是用$(this)填充$thisvariables,所以你不必每次调用都要查找$(this)元素。 它有更好的performance 
 var $this = $(this); 
  $this = $(this) 
 这意味着您将当前对象分配给名为$this的variables。 这不是关键字。 
这只是一个variables名称。
 这很简单: $this = $(this) 。 这只是在内部函数范围内使用的简写。 美元符号在这种情况下只是一个字符,根本不涉及jQuery。 它也可能被命名为_this或xthis , $只是提示variables包含的内容。 
 这似乎毫无意义,但它消除了三个多余的方法调用( $()函数不是免费的),所以最有可能用于性能的原因。 
 在$.fn.lockDimensions里面, this是有lockDimensions调用的jQuery对象。 
 在.each里面,现在在循环的当前迭代中引用DOMElement。  $(this)将DOMElement包装在一个jQuery对象中, var $this = $(this); 只是将$(this)保存在一个名为$this的variables中,所以jQuery构造函数不需要多次调用(如果使用$(this) )。 
 通常在JavaScript中的variables名之前使用$符号来区分常规值和jQuery对象。 所以这里$this只是得到$(this)的值,它返回this jQuery对象。  $只是有效variables名称的一部分。 
  $this是一个名为$this的variables,其中包含对$(this)的引用。  IMO有点无意义。 
我想跳入这里,即使我没有专家的jQuery技能。
无数次我看到类似于以下代码或概念的行:
 var $this = $(this); 
所以我重写它类似于:
 var $jims_this = $(this); 
并testing它。 我也这样做,以清除我可能有的任何困惑。
这是另一个类似的解释不好的代码的例子:
  <style> aa { font-weight: bold; } </style> 
接下来,将addClass调用添加到脚本中:
  $("a").addClass("a"); 
这确实有用,但是令人困惑。 它可以写成:
 <style> a.my_bold_class { font-weight: bold; } </style> $("a").addClass("my_bold_class"); 
吉姆
你已经进入了JavaScript范围和closures领域。
简短的回答:
 this.bar() 
是在foo的范围内执行的(因为这是指foo)
 var barf = this.bar; barf(); 
在全球范围内执行。
这个.bar基本上是指:
在this(foo)的作用域内执行this.bar所指向的函数。 当您将this.bar复制到barf并运行barf时。 Javascript理解为,运行barf指向的函数,并且因为没有这个,它只是在全局范围内运行。
要改正这一点,你可以改变
 barf(); 
像这样的东西:
 barf.apply(this); 
这告诉Javascript在执行它之前将这个范围绑定到barf。
对于jQuery的事件,你将需要使用匿名函数,或扩展在原型的绑定function,以支持范围。