函数外的Javascript函数数据

Javascript function data outside of a function

本文关键字:函数 数据 Javascript      更新时间:2023-09-26

我正在尝试创建一个简单的javascript游戏,我遇到了一个问题,访问函数的数据之外。

这段代码运行得很好。

window.onload = function() {
var FPS = 30;
var ground = new myObject();
var twoground = new myObject();
setInterval(function() {
  clear();
  draw();
  ground.draw(0, 325);
  twoground.draw(125,325);
  alert(ground.xval);
}, 1000/FPS);
};
function myObject(){ 
this.draw = function drawground(groundx, groundy){
this.xval=groundx+125;
this.yval = groundy;
var canvas = document.getElementById('canvas')
var  context = canvas.getContext('2d');
var img=new Image()
img.src="ground.png"
img.onload = function() { 
context.drawImage(img,groundx,groundy)}
}
};

每次间隔运行时,上面的代码都会向浏览器发出125警报,但这是我能做到的唯一方法,例如,如果我执行以下操作。

window.onload = function() {
var FPS = 30;
var ground = new myObject();
var twoground = new myObject();
setInterval(function() {
  clear();
  draw();
  ground.draw(0, 325);
  twoground.draw(125,325);
  myalert();
}, 1000/FPS);
};
 function myalert()
{
 alert(ground.xval);
}
function myObject(){ 
this.draw = function drawground(groundx, groundy){
this.xval=groundx+125;
this.yval = groundy;
var canvas = document.getElementById('canvas')
var  context = canvas.getContext('2d');
var img=new Image()
img.src="ground.png"
img.onload = function() { 
context.drawImage(img,groundx,groundy)}
}

};

我所期望的是相同的事情,因为它应该调用myalert,它只显示一个警报,在相同的间隔,但它没有。我觉得我错过了javascript函数工作方式的一些东西。

当您使用var关键字在函数内声明变量时,该变量将放在函数的局部作用域中。要使其在函数外部可访问,可以通过省略var关键字将其置于全局作用域中。

但是,您可能还需要考虑重构代码,通过将全局变量作为自定义对象的属性或作为函数参数传递来避免全局变量。

JavaScript是静态作用域,而不是动态作用域。当您在第二个示例中提到ground时,您指的是一个名为ground的全局变量,而不是像在第一个示例中那样,指的是局部变量ground。传递给setInterval()的函数从它的父函数中捕获局部变量ground,当alert()被求值时,它仍然在作用域中。