我有一个问题:
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
?
答案 0 :(得分:1)
我必须只是因为我无法将评论附加到屏幕截图中才能得到答案,但我没有看到这种行为。
window.uuid
上不存在window
变量。undefined
。visibilitychange
事件),获取第二个undefined
和window.uuid
的值集,两者都记录了来自听众。visibilitychange
事件,并将uuid记录两次。window.uuid
将返回全局uuid值。我怀疑混淆可能在于你附加事件监听器的方式。
编辑:
使用以下测试页:
<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
媒体资源。
奇怪的是,当我用静态分配替换你的测试时:
window.addEventListener("visibilitychange", function(e) {
window.foo = window.foo || "bar";
})
可以正常工作,我可以直接在控制台中看到window.foo
的预期值。
我也很好奇,asked the Chrome team。如果那里的某个人没有直接回答,我会更新这个答案。