JS功能后无法理解参数

时间:2018-10-17 03:13:02

标签: javascript function

有人为鼠标检测编写了此功能。但是我真的不明白它是如何工作的。因此,我对该功能没有几个疑问。

 document.onmousemove = (function() {
  var onmousestop = function() {
    /* do stuff */
    console.log('STOP');
  }, thread;

  return function() {
 clearTimeout(thread);
    console.log(thread);
    thread = setTimeout(onmousestop, 500);
    
  };
})();

有一部分是我们有function(){},thread; 这部分实际上是什么意思?函数的}后的参数表示什么?

3 个答案:

答案 0 :(得分:2)

var onmousestop = function() {
        /* do stuff */
        console.log('STOP');
    }, thread;

等同于

var onmousestop = function() {
        /* do stuff */
        console.log('STOP');
    };
var thread;

返回函数

return function() {
    clearTimeout(thread);
    console.log(thread);
    thread = setTimeout(onmousestop, 500);
};

做两件事。 1)clearTimeout(thread);取消对onmousestop的任何先前计划的(并且仍在等待中)的呼叫。 2)thread = setTimeout(onmousestop, 500);安排在500毫秒内调用onmousetop,并将thread设置为本质上是一个ID,以标识已调度的操作(以便可以将其取消)。

答案 1 :(得分:1)

您可以通过用逗号分隔多个变量来一次声明多个变量。

var a = function(){}, thread;

这意味着a是一个空函数,并且声明了threadundefined

thread是在返回的第一个函数中声明的变量,然后在第二个函数中初始化。

超时会在500毫秒后导致递归函数调用,在此将再次调用初始函数。

答案 2 :(得分:1)

让我们一步一步地

(function() {
  var onmousestop = function() {
    /* do stuff */
    console.log('STOP');
  }, thread;

  return function() {
 clearTimeout(thread);
    console.log(thread);
    thread = setTimeout(onmousestop, 500);

  };
})();

这是一个自运行功能,与

相同
function t() {
      var onmousestop = function() {
        /* do stuff */
        console.log('STOP');
      }, thread;

      return function() {
        clearTimeout(thread);
        console.log(thread);
        thread = setTimeout(onmousestop, 500);

      };
    }
t()

所以代码就像:

var onmousestop = function() {
    /* do stuff */
    console.log('STOP');
};
var thread;
document.onmousemove = function() {
clearTimeout(thread);
    console.log(thread);
    thread = setTimeout(onmousestop, 500);
  };