Javascript如何使函数/变量全局可用

时间:2014-07-14 08:17:55

标签: javascript jquery global-variables soundcloud document-ready

我是初学者并且制作了一个自定义的SoundCloud播放器,但是javascript不是很好,因为我无法获得变量和函数以获得全局。目前我在某些功能中使用与另一个功能相同的代码来计算变量,如播放器中音乐的当前时间。特别是currenttime我有2个计时器在运行,我也需要一个。解决这个问题的一个简单方法是使当前的第二个变量全局可用。

我试图将所有代码放在document.ready中或使用返回值,但它不起作用。

这是我的代码:

function toggle() {
    var widget = SC.Widget(document.getElementById('soundcloud_widget'));
    widget.isPaused(function(boolean){
        widget.toggle();
        playing = boolean;
        if(playing == true)
        {
            playtoggle.className ="";
            playtoggle.className ="play";
        }
        else if(playing == false)
        {
            playtoggle.className ="";
            playtoggle.className ="pause";
        }
    });
}
function refresher()
{
    setInterval(function(){timer()},10);

    var widget = SC.Widget(document.getElementById('soundcloud_widget'));

    widget.getDuration(function(duration){
        endtime = Math.round(duration/1000);
        var minute = Math.floor((endtime / 100) * 100 / 60);
        var sekunde = Math.round(endtime  - (minute * 60));
        if(sekunde<10)
        {
            document.getElementById('endtime').innerHTML = " "+ minute + ":0" + sekunde;
        }
        else
        {
            document.getElementById('endtime').innerHTML = " "+ minute + ":" + sekunde;
        }
    });  

}
function timer() {
    var widget = SC.Widget(document.getElementById('soundcloud_widget'));

    widget.getCurrentSound(function(music){
    document.getElementById('title').innerHTML = music.title;
    })  

    widget.getPosition(function(position){
        currenttime = Math.round(position/1000);
        currentminute = Math.floor((currenttime /100) * 100 / 60);
        currentsek = Math.round(currenttime - (currentminute * 60));
        if(currentsek < 10)
        {
            document.getElementById('time').innerHTML = currentminute + ":0" + currentsek;
        }
        else
        {
            document.getElementById('time').innerHTML = currentminute + ":" + currentsek;
        }

        widget.getDuration(function(duration){
            endtime = Math.round(duration/1000);
            minute = Math.floor((endtime / 100) * 100 / 60);
            sekunde = Math.round(endtime  - (minute * 60));

            var pWidth = $('#gutter').width();
            var seekToposition = (position / duration)*pWidth;
            $('#seekTo').css('left', seekToposition-15+"px");
            $('#progress').css('width', seekToposition+"px");
        });

        if(currentminute == minute && currentsek == sekunde)
        {
            playtoggle.className="";
            playtoggle.className="pause";
        }
    });
}
function seekTo() {
    var widget = SC.Widget(document.getElementById('soundcloud_widget'));

    var pWidth = $('#gutter').width();
    $('#gutter').click(function(e){
        var scrub = (e.pageX);
        $('#seekTo').css('left', scrub+"px");
        $('#progress').css('width', scrub+"px");
        widget.seekTo((scrub)/pWidth*311498);
    });
}
function keyfunction(e){
    var widget = SC.Widget(document.getElementById('soundcloud_widget'));
    switch(e.keyCode){
      case 32:
        widget.isPaused(function(boolean){
            widget.toggle();
            playing = boolean;
            if(playing == true)
            {
                playtoggle.className ="";
                playtoggle.className ="play";
            }
            else if(playing == false)
            {
                playtoggle.className ="";
                playtoggle.className ="pause";
            }
        });
      break;
    }
}

JSFiddle

在我的计算机上运行但是我想通过变量make global来保存一些代码。

2 个答案:

答案 0 :(得分:3)

在Javascript中总是存在一个变量的范围,所以理论上没有诸如&#34; global&#34;变量(例如,如其他语言中的static)。

但您可以在window对象(或代码的根级别)上定义任何内容,可以在任何地方访问。

例如

window.myVariable = 4;
function alertMyVariable() {
  alert(window.myVariable); // alerts 4;
}

或以下具有相同的语义:

var myVariable = 4;
function alertMyVariable() {
  alert(myVariable); // alerts 4;
}

但请注意,对于后者,您可能会使用本地变量覆盖该变量:

var myVariable = 4;
function alertMyVariable() {
  var myVariable = 6;
  alert(myVariable); // alerts 6!;
}

因此,使用window对其进行限定可能会更好。

以下是DEMO fiddle

答案 1 :(得分:0)

var myvariable;

function myFunction() {
  myvariable = 1;
}



function myFunction2() {
  if (myvariable == 1)
    // something
}