将外部函数变量更改为内部函数变量?Javascript

将外部函数变量更改为内部函数变量?Javascript,javascript,Javascript,我正在为一个项目学习JavaScript,我需要一些帮助 我试图将xPosition和yPosition的外部变量(前两个声明的变量)用从getMousePosition()函数生成的新位置更改为positionManager()函数,但似乎不起作用 从我在整个web(以及这里)中搜索到的内容来看,它可能与闭包、作用域和局部变量有关(我仍然有点困惑)。 Edit1:对不起,我的意思是var xPosition=0未被positionManager()函数中的值替换。其目的是让xPosition

我正在为一个项目学习JavaScript,我需要一些帮助

我试图将
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:”