JavaScriptjQuery:覆盖变量-如何覆盖?更好的表现?

JavaScriptjQuery:覆盖变量-如何覆盖?更好的表现?,javascript,jquery,performance,variables,Javascript,Jquery,Performance,Variables,嘿,伙计们, 我不是一个铁杆的程序员,所以我不懂这些基本知识 假设我的页面上有多个(通过swfobject包含Youtube视频)。 所有这些对象都有一个唯一的ID,如ytplayer_12、ytplayer_2、ytplayer_56等 我需要使用jquery运行所有这些代码,并为它们添加一个EventListener 它工作得很好!我只是想知道我是否在onYouTubePlayerReady()函数之外的正确位置声明了变量($ytid,ytid)?还是应该在函数内部声明变量?甚至在每个循环的

嘿,伙计们, 我不是一个铁杆的程序员,所以我不懂这些基本知识

假设我的页面上有多个(通过swfobject包含Youtube视频)。 所有这些对象都有一个唯一的ID,如ytplayer_12、ytplayer_2、ytplayer_56等

我需要使用jquery运行所有这些代码,并为它们添加一个EventListener

它工作得很好!我只是想知道我是否在
onYouTubePlayerReady()函数之外的正确位置声明了变量($ytid,ytid)?还是应该在函数内部声明变量?甚至在每个循环的内部

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

function onYouTubePlayerReady() {

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

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

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

    });
};
我只是好奇在这种情况下什么更好,如果我现在做的是正确的?
感谢您提供的信息和帮助?

在全局范围内声明变量是个坏主意。将它们移到功能范围中

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");
    });
};

因为变量的值对于每个迭代都是唯一的,所以您肯定需要在循环中定义它们。尽管您可以让自己的生活更轻松一些,并且省去
document.getElementById()
调用,因为
这个
已经指向了您要查找的对象:

var ytid = this;
var $ytid = $(this).attr('id'); // only if you need the id for something other than instantiating the ytid variable
根据戈尔的建议,我使用了
var
,不将变量设置为全局变量