一个变量没有定义,但我之前初始化它

时间:2013-05-24 03:23:21

标签: javascript node.js

我用nodejs和javascript写了一个客户端。当我调试代码时,控制台说没有定义坐标的X1变量,但是我之前初始化它。谁能为我解释一下?

位于“localPlayer = new Player(X1,Y1)”的变量;“     var canvas = document.getElementById(“painting”);

  var socket;     //Socket connection

   var localPlayer, remotePlayers;     // local and remote players
    var context2D = canvas.getContext("2d");

    var lifecount = 3;     // frogger has three life values
    var score = 0;         // when frogger accross a line successfully it will get 10 points

//initialized the coordinates
function initcoordinates(){

    var pipe0X=0,pipe0Y=110;
    var spider1X= 0,spider1Y=140;
    var spider2X= 0,spider2Y=230;
    var X1=300,Y1=450;     // frogger's ordinary coordinate
    var pipe1X=0,pipe1Y=170;
    var pipe2X= 0,pipe2Y=200;
    var rocketX = 0,rocketY=300;
    var carX = 0, carY =330;
    var wheelX= 0,wheelY=360;
    var car1X= 0, car1Y=390;
    var car2X= 0, car2Y=420;
};

function initimage(){

    var picpipe0 = new Image();
    var pic1=new Image();
    var picpipe1 = new Image();      // pipe image
    var picpipe2 = new Image();
    var spider1 = new Image();
    var spider2 = new Image();
    var gresp1 = new Image();
    var gresp2 = new Image();
    var rocket = new Image();
    var car = new Image();
    var wheel = new Image();
    var car1 = new Image();
    var car2 = new Image();



    //load image
    picpipe0.src = "pipe.jpg";
    pic1.src = "qingwa.jpg";
    picpipe1.src = "pipe.jpg";
    picpipe2.src = "pipe.jpg";
    spider1.src="spider.jpg";
    spider2.src="spider.jpg";
    gresp1.src = "gresp.jpg";
    gresp2.src = "gresp.jpg";

    rocket.src = "rocket.jpg";
    car.src = "car.jpg";
    wheel.src = "wheel.jpg";
    car1.src = "car1.jpg";
    car2.src = "car2.jpg";

};
/**************************************************
** GAME INITIALISATION
**************************************************/
function init(){

initcoordinates();
initimage();

// Initialise socket connection
socket = io.connect("http://localhost", {port: 8000, transports: ["websocket"]});



// Initialise remote players array
    remotePlayers = [];

// Initialise the local player
    localPlayer = new Player(X1, Y1);



// Start listening for events
    setEventHandlers();



}

1 个答案:

答案 0 :(得分:3)

您的X1变量在initcoordinates函数中是本地作用域的,init函数无法访问它。不仅X1变量是局部的,而且您在initcoordinates函数中设置的所有坐标只能在此函数中可见。我建议你把这些变量声明在外面,在一个围绕其他变量的直接函数中,如下所示:

(function(){
  var X1;

  function initcoordinates(){
    X1 = ...
  }

  function init(){
    //do something with the X1 variable here...
  }

})();

这样,所有函数都将共享对立即函数范围内声明的变量的访问。