获取其他javascript函数中变量的值


get the value of variable inside other function javascript

我在"onPlayerReady"里面有一个变量"mail",我有电子邮件地址,我想在"onPlayerStateChange"里面调用这个变量,这样我就可以把值传递给'input.php'页面保存到数据库中。

$(function(){
  var youtubePlayer;
  var myWindow = window;
  var vid_id='ha48nSKLLh8';
  onYouTubeIframeAPIReady = function(){
   youtubePlayer = new YT.Player('youtube', {
     height: '390',
     width: '640',
     videoId: vid_id,
     events: {
       'onReady': onPlayerReady,
       'onStateChange': onPlayerStateChange
     }
   });
   }
  onPlayerReady = function(event) {
   event.target.pauseVideo();
   var mail=prompt('email:'); //this is the variable mail i am talking about i want the value if this variable inside onPlayerStateChange

   };

  onPlayerStateChange = function(event) {
   if (event.data == 1) {
       var tm = youtubePlayer.getCurrentTime();
       var st = youtubePlayer.getPlayerState();
       //$("#status1").text(tm);    

       $("#status1").text(st);
       $.ajax({
        type: 'POST',
        url: 'input.php',
        data:{ tm: tm, vid_id: vid_id,mail:mail},   
        success:function(html){
           alert(done);
        }
    });
       //$("#status1").text(tm);
     $("#status").text("Playing!");
     myWindow.focus();
     myWindow.onblur = function() {
       $("#status").text("You went away!");
       youtubePlayer.stopVideo();
     };
   }
  };
  youtubeplayer.bind('play',function(){
      youtubeplayer.time(60);
      return this.unbind;
  });
})

请帮助我与此或建议我是否有任何其他方式来保存在"onPlayerReady"输入的电子邮件。提前感谢!

如果没有必要,我建议在闭包中声明mail变量,而不是全局变量,即:

$(function(){
    var mail = null; // not a global, but available in the entire function scope.
    var youtubePlayer;
    var myWindow = window;
    ...

的细微差别是,现在没有其他代码可以潜在地覆盖mail变量(反之亦然),因此没有命名冲突。在javascript中,最好的做法是尽量避免全局变量。

确保不要在onPlayerReady()中重新定义mail变量:

onPlayerReady = function(event) {
   event.target.pauseVideo();
   mail = prompt('email:'); // Only store the prompt input (i.e no var).
};

这样,您仍然可以访问ajax请求中的mail变量,而不会出现上面提到的缺点。

如果在$(function()之外声明mail变量,它将是一个全局变量,并且可以被所有Javascript代码访问。例如

var mail = "";
$(function(){
    ...
    onPlayerReady = function(event) {
        event.target.pauseVideo();
        mail=prompt('email:'); // remove the var here
    };

事实上,正如@nikhil所指出的,您甚至可以将其放在外部function()中(只要它在onPlayerReady函数之外)。