有人为鼠标检测编写了此功能。但是我真的不明白它是如何工作的。因此,我对该功能没有几个疑问。
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; 这部分实际上是什么意思?函数的}后的参数表示什么?
答案 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
是一个空函数,并且声明了thread
但undefined
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);
};