使用console.log打印坐标时报Cannot read property 'clientX' of undefined错误
错误原因
event对象仅在事件触发的回调执行上下文中才会被默认注入,你通过setInterval定时调用Chk函数时,没有对应的鼠标/交互事件触发,此时全局event为undefined,调用event.clientX自然会抛出你遇到的报错:Uncaught TypeError: Cannot read property 'clientX' of undefined,该问题和循环逻辑无关。
修复方案
你可以先通过mousemove事件监听实时更新鼠标坐标到全局变量,再在定时器中直接读取存储好的坐标值即可,修正后代码如下:
var USrPosX var USrPosY // 监听鼠标移动事件,实时更新坐标 document.addEventListener('mousemove', function(event) { USrPosX = event.clientX USrPosY = event.clientY }) setInterval(Chk, 1000) function Chk() { // 直接读取已经存储好的坐标,不需要再访问event console.log(USrPosX) console.log(USrPosY) }
逻辑说明
- 鼠标移动时事件回调会拿到合法的
event对象,实时更新坐标变量 - 定时器仅负责定期读取已经存储的坐标值,不需要直接访问事件对象,避免了undefined报错
内容的提问来源于stack exchange,提问作者TheCookieClickerCopyCat
相关产品推荐
相关产品推荐

