首页 > 解决方案 > 没有窗口的窗口属性

问题描述

最近我注意到event在函数中使用了“”变量,其中参数和闭包都不包含它。但它有效并且存在事件。看起来“ event”指的是window.event。

因此有2个问题:

  1. 为什么我可以像变量一样访问窗口属性而不引用窗口?
  2. event如果我们在通常的 JavaScript(在我的情况下是 TypeScript)代码中,而不是在处理程序或任何将事件作为参数的东西中,什么事件位于默认的“ ”变量中?

关于事件与窗口事件的说明:如果直接在 devTools 控制台中输入“window.innerHeight” - 我们将得到数字。我们可以得到相同的结果,只需键入“innerHeight”而不输入“window”。

标签: javascript

解决方案


  1. 为什么我可以像变量一样访问窗口属性而不引用窗口?

“为什么?” 如果不询问编写规范的人,问题就无法真正回答。这就是window对象的工作方式,因为它代表全局范围。正如我在评论中提到的,您可以访问任何带或不带window.前缀的全局属性。那是因为全局变量实际上是附加到全局对象上的,在这种情况下window——没有任何东西可以超出这个全局范围。同样,这在其他没有对象的 JS 环境中是不正确的window,例如在 Node 中,全局对象被命名为global.


  1. 如果我们在通常的 JavaScript(在我的情况下是 TypeScript)代码中,而不是在处理程序或任何将事件作为参数的东西中,什么事件位于默认的“事件”变量中?

您可以自己记录并查看:

console.log(window.event);

button.addEventListener('click', function (event) {
  console.log(window.event);
});
<button id="button">Click Me!</button>

根据MDN 文章window.event,对处理事件的函数外部的引用是undefined. 您可以从代码片段中看到,实际上是第一个调用,undefined而事件侦听器中的第二个调用记录了正在处理的事件。


推荐阅读