javascript - 没有窗口的窗口属性
问题描述
最近我注意到event
在函数中使用了“”变量,其中参数和闭包都不包含它。但它有效并且存在事件。看起来“ event
”指的是window.event。
因此有2个问题:
- 为什么我可以像变量一样访问窗口属性而不引用窗口?
event
如果我们在通常的 JavaScript(在我的情况下是 TypeScript)代码中,而不是在处理程序或任何将事件作为参数的东西中,什么事件位于默认的“ ”变量中?
关于事件与窗口事件的说明:如果直接在 devTools 控制台中输入“window.innerHeight” - 我们将得到数字。我们可以得到相同的结果,只需键入“innerHeight”而不输入“window”。
解决方案
- 为什么我可以像变量一样访问窗口属性而不引用窗口?
“为什么?” 如果不询问编写规范的人,问题就无法真正回答。这就是window
对象的工作方式,因为它代表全局范围。正如我在评论中提到的,您可以访问任何带或不带window.
前缀的全局属性。那是因为全局变量实际上是附加到全局对象上的,在这种情况下window
——没有任何东西可以超出这个全局范围。同样,这在其他没有对象的 JS 环境中是不正确的window
,例如在 Node 中,全局对象被命名为global
.
- 如果我们在通常的 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
而事件侦听器中的第二个调用记录了正在处理的事件。
推荐阅读
- scala - 如何比较从 RDBMS 表读取的数据帧的模式与 Hive 上的同一表?
- c++ - 将字符串变量分配给 unsigned char 变量
- scala - 与 CSV 之间的嵌套 Scala 案例类
- ios - 从应用程序向 ARKit 添加参考图像
- android - 从android中的动态链接获取实际的url
- .net - 从 Visual Studio Team Services REST API 获取所有工作项
- php - 托管时无法访问基于 id 的 URL。文章.php?id=10
- dropwizard - 使用 Jersey 发出 Post 请求时服务器端的 Classcast 异常
- python - 列表排序返回意外输出
- cakephp - CakePHP 3 启用 twig dump()