Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 - Fatal编程技术网

Javascript 事件变量来自哪里?

Javascript 事件变量来自哪里?,javascript,Javascript,我试图理解以下javascript代码: onMouseMoved = (function(_this) { return function(event) { dx = (event.pageX/3) / window.innerWidth; dy = (event.pageY/3) / window.innerHeight; return tr = Math.atan2(hy, hx); }; })(this); window.a

我试图理解以下javascript代码:

  onMouseMoved = (function(_this) {
    return function(event) {
      dx = (event.pageX/3) / window.innerWidth;
      dy = (event.pageY/3) / window.innerHeight;
      return tr = Math.atan2(hy, hx);
    };
  })(this);
  window.addEventListener('mousemove', onMouseMoved, false);
为什么外部函数返回函数?事件变量来自哪里

为什么外部函数返回函数

因为:

(a) 它在函数表达式前面有一个return语句

(b) 返回的函数用作预期该参数为函数的函数的参数

事件变量来自哪里


从实现事件侦听器例程的本机浏览器代码(根据for
addEventListener

第一个函数是立即调用的函数表达式(IIFE),它立即执行并返回另一个设置为事件处理程序回调的函数

也可以这样写

window.addEventListener('mousemove', onMouseMoved, false);

function onMouseMoved(event) {
    dx = (event.pageX/3) / window.innerWidth;
    dy = (event.pageY/3) / window.innerHeight;
    return tr = Math.atan2(hy, hx);
};
还是这个

window.addEventListener('mousemove', function(event) {
    dx = (event.pageX/3) / window.innerWidth;
    dy = (event.pageY/3) / window.innerHeight;
    return tr = Math.atan2(hy, hx);
}, false);
这将是完全相同的,但我们不会有
\u This
的值,这似乎是IIFE的原因,锁定在
This
的外部值中,但函数参数从未使用过,因此这里似乎不需要它

因此,事件参数来自本机

有关生活如何运作的详细解释,请参见此

变量是您的参数。或者你会问这个值来自哪里?这是咖啡脚本生成的代码,不是吗?IEFE的原因是编译器不是很聪明。如果在函数中不使用
,则应使用
->
而不是
=>
。使生成的代码更清晰。我不写咖啡脚本,但谢谢!