Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从匿名鼠标事件函数中访问变量?_Javascript_Mouseevent - Fatal编程技术网

Javascript 如何从匿名鼠标事件函数中访问变量?

Javascript 如何从匿名鼠标事件函数中访问变量?,javascript,mouseevent,Javascript,Mouseevent,我试图从外部访问变量myvar,如下所示: $(document).mousemove(function(e){ var myvar = winHeight() + scrollY() - e.pageY; }); console.log(myvar); 但是Chrome的javascript控制台一直在说“uncaughtreferenceerror:myvar不是所有产品都定义的:203 (匿名功能) 我做错了什么?如何在此函数之外访问此变量 编辑:我意识到我试图做的事情是不可能

我试图从外部访问变量myvar,如下所示:

$(document).mousemove(function(e){
    var myvar = winHeight() + scrollY() - e.pageY;
}); 
console.log(myvar);
但是Chrome的javascript控制台一直在说“uncaughtreferenceerror:myvar不是所有产品都定义的:203 (匿名功能)

我做错了什么?如何在此函数之外访问此变量


编辑:我意识到我试图做的事情是不可能实现的。我已经完全改变了我的策略,代码现在运行良好。(感谢James,特别是Vlad的帮助!)

您需要将变量移动到一个外部作用域,该作用域可由两位代码访问

var myvar = -1;

$(document).mousemove(function(e){
    myvar = winHeight() + scrollY() - e.pageY;
}); 

console.log(myvar);

您需要将变量移动到两位代码都可以访问的外部范围

var myvar = -1;

$(document).mousemove(function(e){
    myvar = winHeight() + scrollY() - e.pageY;
}); 

console.log(myvar);

我认为这是javascript事件的工作。基本上,您有一个全局变量,它将在鼠标移动时更新。更新变量后,必须让其他组件知道变量已准备好进行处理

守则:

var myVar; // the global variable

// the function that will be caled when myVar has been changed
var myVarChangedHandler = function() {
    console.log('myVar variable has been changed: ' + myVar);
}

// bind the event to the above event handler
$('body').bind('MyVarChangedEvent', myVarChangedHandler);

// instal mouse move event handler on document
$(document).mousemove(function(e){
    myVar = winHeight() + scrollY() - e.pageY;
    $('body').trigger('MyVarChangedEvent');
}); 
更新

从movemove事件处理程序中删除了
var
关键字

依赖于myVar的代码应该放在
myVarChangedHandler
函数中

我会尽我所能解释你的代码,其中的缺陷 你应该如何用类比来解决这个问题。 让我们看下面的代码(全局变量已更正)

假设您是一名程序员,是web开发部门的团队负责人 在一些不知名的公司里,你有一份一天要完成的任务清单( 我们的类比任务是每次鼠标移动时更新
myvar
) 您拥有一个存储库(
var myvar
)和两名开发人员:

  • 开发者John(
    函数(e){myVar=…};
  • 开发者Ken(
    console.log(myvar)
上午09:00您来到办公室(用户打开页面)

09:05打开服务器/存储库的电源

var myvar;
09:10你告诉约翰: 约翰,请完成这项任务,每次你完成每项任务 将其上载到存储库,并在工作时间结束后回家

$(document).mousemove(function(e){
    myvar = winHeight() + scrollY() - e.pageY;
});         
09:11你告诉肯: Ken,请立即在存储库中测试代码,然后回家 已经完成测试

console.log(myvar);
(此时,Ken看到存储库是空的,就回家了——这是因为 约翰连一分钟内完成任务的时间都没有,所以肯没有什么要测试的。)

09:12你回家

09:12,办公室里只有约翰在做任务,你和肯已经离开家了 因为你没有别的事要做。 您的代码也会发生这种情况。您可以输出
myvar
的值,但您甚至没有移动鼠标 因此,值当然是
undefined

为了解决这个问题,我们添加了一些修改:

09:00你早上来办公室

09:05打开服务器电源(存储库)

09:10你告诉约翰:

John, please do this tasks and everytime you complete each task
uploaded it to the repository and tell Ken to test the code.
Go home after you have finished
09:11你告诉肯:

Ken, each time John tells you that he has completed a task,
fetch the code from the repository and test it.
Go home after he has finished
09:12你回家

09:12,约翰和肯都在办公室做他们的工作

在上面的例子中,ken是
myVarChangedHandler=function(){…}

当John告诉Ken他完成了任务时,实际发生了一件事(讲述), 当Ken确认John信号时,他开始测试(Ken是事件处理程序)

这就是javascript中事件驱动架构的工作原理。 我建议您放弃jquery、mootools等。。。并开始学习核心概念 还有基本的。重新设计轮子几次,然后返回jquery。
我希望我的解释足够让您理解。

我认为这是javascript事件的工作。基本上,您有一个全局变量,它将在鼠标移动时更新。更新变量后,必须让其他组件知道变量已准备好进行处理

守则:

var myVar; // the global variable

// the function that will be caled when myVar has been changed
var myVarChangedHandler = function() {
    console.log('myVar variable has been changed: ' + myVar);
}

// bind the event to the above event handler
$('body').bind('MyVarChangedEvent', myVarChangedHandler);

// instal mouse move event handler on document
$(document).mousemove(function(e){
    myVar = winHeight() + scrollY() - e.pageY;
    $('body').trigger('MyVarChangedEvent');
}); 
更新

从movemove事件处理程序中删除了
var
关键字

依赖于myVar的代码应该放在
myVarChangedHandler
函数中

我会尽我所能解释你的代码,其中的缺陷 你应该如何用类比来解决这个问题。 让我们看下面的代码(全局变量已更正)

假设您是一名程序员,是web开发部门的团队负责人 在一些不知名的公司里,你有一份一天要完成的任务清单( 我们的类比任务是每次鼠标移动时更新
myvar
) 您拥有一个存储库(
var myvar
)和两名开发人员:

  • 开发者John(
    函数(e){myVar=…};
  • 开发者Ken(
    console.log(myvar)
上午09:00您来到办公室(用户打开页面)

09:05打开服务器/存储库的电源

var myvar;
09:10你告诉约翰: 约翰,请完成这项任务,每次你完成每项任务 将其上载到存储库,并在工作时间结束后回家

$(document).mousemove(function(e){
    myvar = winHeight() + scrollY() - e.pageY;
});         
09:11你告诉肯: Ken,请立即在存储库中测试代码,然后回家 已经完成测试

console.log(myvar);
(此时,Ken看到存储库是空的,就回家了——这是因为 约翰连一分钟内完成任务的时间都没有,所以肯没有什么要测试的。)

09:12你回家

09:12,办公室里只有约翰在做任务,你和肯已经离开家了 因为你没有别的事要做。 您的代码也会发生这种情况。您可以输出
myvar
的值,但您甚至没有移动鼠标 因此,值当然是
undefined

为了解决这个问题,我们添加了一些修改:

09:00你早上来办公室

09:05打开服务器电源(存储库)

09:10你告诉约翰:

John, please do this tasks and everytime you complete each task
uploaded it to the repository and tell Ken to test the code.
Go home after you have finished
09:11你告诉肯:

Ken, each time John tells you that he has completed a task,
fetch the code from the repository and test it.
Go home after he has finished
09:12你回家

09:12,约翰和肯都在办公室做他们的工作<