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;
添加回答
舉報