gpt4 book ai didi

javascript - visibilitychange 是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 21:08:12 37 4
gpt4 key购买 nike

我有一个问题:

window.addEventListener("visibilitychange", function(e) {
console.log(window.uidd)
window.uidd = window.uidd || (new Date).getTime() + Math.random()
console.log(window.uidd)
})

但是如果你第一次打开控制台,你会得到:

undefined
124124214124124.124

window.uidd // undefined

为什么最后一个字符串是undefined

最佳答案

我之所以必须回答这个问题,只是因为我无法将屏幕截图附加到评论中,但我没有看到这种行为。

  1. 我确认 window.uuid window 上不存在变量.
  2. 我添加事件监听器,并首先获得预期的 undefined从注册它。
  3. 然后我点击选项卡(第一个 visibilitychange 事件),并获得第二个 undefined以及为 window.uuid 设置的值, 都是从监听器记录的。
  4. 我点击返回选项卡,触发第二个 visibilitychange事件,并让 uuid 记录两次。
  5. 正在输入 window.uuid进入控制台返回全局 uuid 值。

enter image description here

我怀疑混淆可能在于您附加事件监听器的方式。

编辑:

测试页如下:

<html>
<head>
<script>
window.addEventListener("visibilitychange", function(e) {
console.dir(window);
console.log(window.uidd)
window.uidd = window.uidd || (new Date).getTime() + Math.random()
console.log(window.uidd)
})
</script>
</head>
<body></body>
</html>

我确实看到了这种行为。您需要使用 this.uuid 访问该属性, 而不是 window.uuid , 即使只是输入 window将显示 .uuid属性(property)。

奇怪的是,当我用这个静态赋值替换你的测试时:

window.addEventListener("visibilitychange", function(e) {
window.foo = window.foo || "bar";
})

确实有效,我可以看到 window.foo 的期望值直接在控制台中。

我也很好奇,并且asked the Chrome team .如果那里的人没有直接回答,我会更新这个答案。

关于javascript - visibilitychange 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413036/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com