Javascript 当美元';代码中使用了什么?

Javascript 当美元';代码中使用了什么?,javascript,jquery,Javascript,Jquery,我有以下代码: $('#detailData') .on('change', '.updatable', function () { var type = $(this).attr('id').split('_')[1]; updateField(entity, $(this), type); return false; }) 我想添加到代码中并多次使用$(this)。为了清楚起见,我想将这个赋值给一个变量。当我使用jQuery时

我有以下代码:

$('#detailData')
    .on('change', '.updatable', function () {
        var type = $(this).attr('id').split('_')[1];
        updateField(entity, $(this), type);
        return false;
    })
我想添加到代码中并多次使用
$(this)
。为了清楚起见,我想将
这个
赋值给一个变量。当我使用jQuery时,我看到人们在变量名之前放置了一个
$
。我说的下列是正确的吗

var $abc = $('#abc');

如果这是正确的,那么我应该如何命名
$(this)
,如果我理解正确,它指向一个DOM变量。DOM变量与使用
$('#abc')
返回的变量之间是否有任何区别?

使用
$this
存储
$(this)
只是一种代码约定,用于提醒程序员所讨论的变量已经是jQuery对象,而不是纯DOM元素

它有助于避免常见的书写错误:

var foo = $(...);
$(foo).doSomething();
该错误是无害的,但会导致代码稍微低效

相反,使用
$foo
也会提醒程序员不能直接对该变量调用本机DOM函数,应该使用
$foo[n]
$foo.get(n)
来访问封闭的DOM元素

另外,不要忘记,因为
这个
只是一个纯DOM元素,所以您可以(并且应该)在适当的时候使用本机DOM函数或属性:

var type = this.id.split('_')[1];

$这个
很常见,但完全取决于您。一致性是最重要的。

使用:

 //jQuery to jQuery object
 $myvar = $(this);

 //jQuery to JavaScript HTML object
 var myVar = $(this)[0];
var$this=$(this)

通常是当函数在此上下文中调用多个单独的对象调用时。其思想是,由于Jquery将为所需对象重新扫描dom,因此必须一次性获取此dom对象是一种性能代价。通过将对象分配到本地范围,重用$this超过$(this)的成本更低

对于大多数开发人员来说,使用$this作为局部变量名是一种常见的命名方案

$('#detailData').on('change', '.updatable', function (){
    var $this = $(this),
        type = $this.attr('id').split('_')[1];
    updateField(entity, $this, type);
    return false;
});

只要有意义,你可以随意命名
var$this
var$element
一样有效,就像
var-elem
一样有效。我们在工作中的约定将其命名为
$this
。我通常将其命名为$me或$t。。。如果你对这个“
”在精神上更容易理解,就把它命名为“foo”或“bar”:p
,只要你知道它指的是什么……写$inputField=$(this)@Marilou有意义吗?不,你应该只使用
$this
,而只使用它来存储
$(this)
。如果它指的是inputField,是的。。$只是一个约定,告诉我们它已经是一个jquery对象,就像Alnitak说的那样
$this
告诉我的少于
$inputField
@Alnitak我认为
$inputField
是比
$this
更有价值的变量名。它有助于阅读代码的人了解此元素的实际用途。@Dennis我不同意。回调处理程序中
this
的语义定义非常明确(即当前正在与之交互的元素),任何程序员如果因为使用
$this
而不是
$inputField
而感到困惑,我都不会雇佣;然后写:$this.attr('id').split('u')[1];是否有效@Marilou会的,但请看我最后一次编辑。代码是正确的,解释是无用的。浏览器不必在每次编写
$(此)
时都“重新扫描”DOM—它只是(重新)创建了一个包含该特定元素的jQuery对象。好的,因此重新实例化将是一个更好的词—其思想是有性能成本/效益。我从来没有说过它是“浏览器”@AlexP您的意思是Sizzle不必查找元素;)@SparK我的观点是,如果您已经有了对DOM元素的引用,那么Sizzle/jQuery/浏览器不必“查找”或“扫描”任何东西——它只是将现有的DOM元素引用包装在jQuery对象中。