3 回答
TA贡献1111条经验 获得超0个赞
是的,绝对可以使用$this。
每次使用时$(this),都必须构造一个新的jQuery对象,同时$this保留相同的对象以供重用。
一个性能测试表明,$(this)是显著慢$this。但是,由于两者都每秒执行数百万个操作,因此它们都不大可能产生任何实际影响,但是无论如何,重用jQuery对象是一种更好的做法。当真正的性能影响出现是当一个选择,而不是一个DOM对象,反复传递给jQuery的构造-如$('p')。
至于的使用var,再次始终使用var来声明新变量。这样,该变量将只能在声明它的函数中访问,并且不会与其他函数冲突。
更好的是,jQuery设计为可与链接一起使用,因此请尽可能利用这一点。与其声明一个变量并多次调用该函数,不如说:
var $this = $(this);
$this.addClass('aClass');
$this.text('Hello');
...将函数链接在一起,以不必要地使用附加变量:
$(this).addClass('aClass').text('Hello');
TA贡献1921条经验 获得超9个赞
转到带有jQuery的页面,然后在控制台中运行它。我知道这很糟糕,但是您可以看到$ this每次都赢了。
var time = new Date().getTime();
$('div').each(function() {
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
$(this).addClass('hello');
$(this).removeClass('hello');
});
var now = new Date().getTime();
console.log(now- time);
var var_time = new Date().getTime();
$('div').each(function() {
var $this = $(this);
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
$this.addClass('hello');
$this.removeClass('hello');
});
var var_now = new Date().getTime();
console.log(var_now - var_time);
TA贡献1772条经验 获得超6个赞
我无法告诉您我必须重构jQuery b / c多少次,而人们不使用缓存。
我还要补充一下人们需要学习的结合缓存的方法:
var $element = $("#elementId"),
elementLength = $element.length,
elementText = $element.text(),
someString = "someValue",
someInt = 0,
someObj = null;
代替这个:
var $element = $("#elementId");
var elementLength = $element.length;
var elementText = $element.text();
var someString = "someValue";
var someInt = 0;
var someObj = null;
添加回答
举报