将外部函数变量更改为内部函数变量?Javascript
我正在为一个项目学习JavaScript,我需要一些帮助 我试图将将外部函数变量更改为内部函数变量?Javascript,javascript,Javascript,我正在为一个项目学习JavaScript,我需要一些帮助 我试图将xPosition和yPosition的外部变量(前两个声明的变量)用从getMousePosition()函数生成的新位置更改为positionManager()函数,但似乎不起作用 从我在整个web(以及这里)中搜索到的内容来看,它可能与闭包、作用域和局部变量有关(我仍然有点困惑)。 Edit1:对不起,我的意思是var xPosition=0未被positionManager()函数中的值替换。其目的是让xPosition
xPosition
和yPosition
的外部变量(前两个声明的变量)用从getMousePosition()
函数生成的新位置更改为positionManager()
函数,但似乎不起作用
从我在整个web(以及这里)中搜索到的内容来看,它可能与闭包、作用域和局部变量有关(我仍然有点困惑)。
Edit1:对不起,我的意思是
var xPosition=0代码>未被positionManager()
函数中的值替换。其目的是让xPosition=mousePos.x
取代它,但它似乎不起作用
Edit2:每次我在画布上移动鼠标时,getMousePosition
函数都会生成鼠标坐标。然后,positionManager
获取这些位置并更新顶部的var xPosition
。然而,var xPosition
仍然显示为0
function mouseController(canvas, context) {
var xPosition = 0; // To be replaced by values from positionManager.
var yPosition = 0; // ^
canvas.addEventListener("mousemove", positionManager);
canvas.addEventListener("mouseout", hideCoordinates);
canvas.addEventListener("click", drawWidget);
/**
*Gets the mouse position.
* @param canvas
* @returns x and y coordinates. Use (VARIABLE NAME).x and (VARIABLE NAME).y
*/
function getMousePosition(canvas, event) {
var rect = canvas.getBoundingClientRect();
return {
x: Math.round((event.clientX-rect.left)/(rect.right-rect.left)*canvas.width),
y: Math.round((event.clientY-rect.top)/(rect.bottom-rect.top)*canvas.height)
};
}
/**
* Manages and directs the mouse positions received from getMousePosition().
*
* @param event
*/
function positionManager(event) {
var mousePos = getMousePosition(canvas, event);
// Formats a message that shows the coordinates.
var mouseCoordinates = 'Coordinates: ' + mousePos.x + ',' + mousePos.y;
xPosition = mousePos.x; // Change the global variable to this new one.
yPosition = mousePos.y;
console.log("positionManager xPosition: " + xPosition); // Works fine, displays new coordinates everytime the mouse moves.
// Sends the message to be displayed.
displayCoordinates(mouseCoordinates);
}
console.log("global var xPosition: " + xPosition); // Still displays 0 even after positionManager
}
您已经在“mousemove”事件上添加了一个事件侦听器,该事件调用positionManager
方法。请记住,此方法仅在发生“mousemove”事件时执行
调用mouseController
方法时,“mousemove”事件不会在该方法完成执行之前发生
这意味着控制流将跳转到下一行canvas.addEventListener(“mouseout”,…)
,最后一行包含console.log(…)
语句,而不调用positionManager
函数
执行是这样的:
var yPosition = 0;
canvas.addEventListener("mousemove", positionManager);
canvas.addEventListener("mouseout", hideCoordinates);
canvas.addEventListener("click", drawWidget);
// Then execution jumps to the last line as below.
console.log("global var xPosition: " + xPosition);
“mousemove”事件发生后,您可能需要检查变量xPosition
和yPosition
的值。您在“mousemove”事件上添加了一个事件监听器,该监听器调用positionManager
方法。请记住,此方法仅在发生“mousemove”事件时执行
调用mouseController
方法时,“mousemove”事件不会在该方法完成执行之前发生
这意味着控制流将跳转到下一行canvas.addEventListener(“mouseout”,…)
,最后一行包含console.log(…)
语句,而不调用positionManager
函数
执行是这样的:
var yPosition = 0;
canvas.addEventListener("mousemove", positionManager);
canvas.addEventListener("mouseout", hideCoordinates);
canvas.addEventListener("click", drawWidget);
// Then execution jumps to the last line as below.
console.log("global var xPosition: " + xPosition);
在“mousemove”事件发生后,您可能需要检查变量xPosition
和yPosition
的值。您所说的似乎不起作用的确切含义。。尽量具体点。也许可以展示正在发生的事情和应该发生的事情?您在哪里检查这些值?为什么它们是错误的?根据您的代码,变量都可以在positionManager
中访问,因此它应该可以工作。我们如何执行它?我觉得很好你说的似乎不起作用是什么意思。。尽量具体点。也许可以展示正在发生的事情和应该发生的事情?您在哪里检查这些值?为什么它们是错误的?根据您的代码,变量都可以在positionManager
中访问,因此它应该可以工作。我们如何执行它?对我来说似乎很好。即使在每次鼠标移动之后,这些变量不应该用positionManager中提供的变量更新并替换初始变量吗?目前还没有这样做……您如何跟踪positionManager
中提供的新值?是通过位置管理器xPosition:“
行中的值还是通过全局变量xPosition:“
”?目的是让全局变量位置跟踪它。getMousePosition计算鼠标在画布上的位置,然后positionManager var mousePos允许我使用这些位置。mousePos.x/mousePos.y显示并保持值。我接下来要做的是使用“xPosition=mousePos.x”替换全局变量,用新值更新“var xPosition=0”的全局值,以便我可以将它们用于其他函数。希望你能理解我想说的-我在这方面很糟糕。一旦你遇到“mousemove”事件,你会在其他函数中得到更新的值,你可以通过在这些函数中执行console.log
来检查。当前,您希望更新值的行[“global var xPosition:”
)将只执行一次。它很可能在调用其他函数之前执行。因此呈现初始值。即使在每次鼠标移动之后,是否应该使用positionManager中提供的变量更新变量并替换初始变量?目前还没有这样做……您如何跟踪positionManager
中提供的新值?是通过位置管理器xPosition:“
行中的值还是通过全局变量xPosition:“
”?目的是让全局变量位置跟踪它。getMousePosition计算鼠标在画布上的位置,然后positionManager var mousePos允许我使用这些位置。mousePos.x/mousePos.y显示并保持值。我接下来要做的是使用“xPosition=mousePos.x”替换全局变量,用新值更新“var xPosition=0”的全局值,以便我可以将它们用于其他函数。希望你能理解我想说的-我在这方面很糟糕。一旦你遇到“mousemove”事件,你会在其他函数中得到更新的值,你可以通过在这些函数中执行console.log
来检查。当前,将执行您希望更新值的行[“global var xPosition:”
)