3 回答

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
是的,絕對(duì)可以使用$this。
每次使用時(shí)$(this),都必須構(gòu)造一個(gè)新的jQuery對(duì)象,同時(shí)$this保留相同的對(duì)象以供重用。
一個(gè)性能測(cè)試表明,$(this)是顯著慢$this。但是,由于兩者都每秒執(zhí)行數(shù)百萬個(gè)操作,因此它們都不大可能產(chǎn)生任何實(shí)際影響,但是無論如何,重用jQuery對(duì)象是一種更好的做法。當(dāng)真正的性能影響出現(xiàn)是當(dāng)一個(gè)選擇,而不是一個(gè)DOM對(duì)象,反復(fù)傳遞給jQuery的構(gòu)造-如$('p')。
至于的使用var,再次始終使用var來聲明新變量。這樣,該變量將只能在聲明它的函數(shù)中訪問,并且不會(huì)與其他函數(shù)沖突。
更好的是,jQuery設(shè)計(jì)為可與鏈接一起使用,因此請(qǐng)盡可能利用這一點(diǎn)。與其聲明一個(gè)變量并多次調(diào)用該函數(shù),不如說:
var $this = $(this);
$this.addClass('aClass');
$this.text('Hello');
...將函數(shù)鏈接在一起,以不必要地使用附加變量:
$(this).addClass('aClass').text('Hello');

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
轉(zhuǎn)到帶有jQuery的頁面,然后在控制臺(tái)中運(yùn)行它。我知道這很糟糕,但是您可以看到$ 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貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
我無法告訴您我必須重構(gòu)jQuery b / c多少次,而人們不使用緩存。
我還要補(bǔ)充一下人們需要學(xué)習(xí)的結(jié)合緩存的方法:
var $element = $("#elementId"),
elementLength = $element.length,
elementText = $element.text(),
someString = "someValue",
someInt = 0,
someObj = null;
代替這個(gè):
var $element = $("#elementId");
var elementLength = $element.length;
var elementText = $element.text();
var someString = "someValue";
var someInt = 0;
var someObj = null;
添加回答
舉報(bào)