2011-02-17 15 views
0

嘿傢伙, 我不是一個硬核編碼器,所以我沒有在這裏得到這個基礎知識。javascript jquery:覆蓋變量 - 如何?更好的性能?

想象一下,我的頁面上有多個頁面(包含通過swfobject的Youtube視頻)。 所有這些對象都有一個唯一的ID,如ytplayer_12,ytplayer_2,ytplayer_56等。

我需要使用jquery遍歷所有這個ytplayer_,並向它們添加EventListener。

它工作得很好!我只是想知道我是否在正確的位置聲明瞭變量($ ytid,ytid) - 在onYouTubePlayerReady()函數之外?或者我應該在函數中聲明變量?甚至在每個循環內?

var $ytid = '', 
    ytid = ''; 

function onYouTubePlayerReady() { 

    $('object[id^="ytplayer_"]').each(function() { 

     $ytid = $(this).attr('id'); 
     ytid = document.getElementById($ytid); 

     ytid.addEventListener("onStateChange", "foo"); 

    }); 
}; 

我只是好奇在這種情況下有什麼更好的,如果我現在正確地做對了嗎? 感謝您的信息和幫助?

回答

1

在全局範圍聲明變量是個壞主意。將它們移到功能範圍內。

function onYouTubePlayerReady() { 
    var $ytid = '', ytid = ''; 
    $('object[id^="ytplayer_"]').each(function() { 
     $ytid = $(this).attr('id'); 
     ytid = document.getElementById($ytid); 

     ytid.addEventListener("onStateChange", "foo"); 
    }); 
}; 

你可以擺脫他們:

function onYouTubePlayerReady() { 
    $('object[id^="ytplayer_"]').each(function() { 
     this.addEventListener("onStateChange", "foo"); 
    }); 
}; 
1

自變量的值是唯一的每次迭代,你一定要定義它們循環。雖然可以使生活更輕鬆一點爲自己和離開了document.getElementById()通話,因爲this已經指向的對象,你正在尋找:

var ytid = this; 
var $ytid = $(this).attr('id'); // only if you need the id for something other than instantiating the ytid variable 

我以前var按GOR的建議不作變量全球