如果可以,如果在函数中没有调用代码,你应该使用它代替窗口吗?
this.addEventListener(...);
vs
window.addEventListener(...);
这比较短2个字符,如果可以,最好使用吗?
答案 0 :(得分:3)
我建议避免使用'this',除非通过call
,apply
或bind
明确指定。这样,对this
所指的内容一无所知。而且我也喜欢总是明确声明对全局对象的访问:
(function(global, document, undefined){
global.myGlobalVar = 'foo';
})(window, document);
这种方式总是很清楚,当我做任何全局事务时,代码可以更容易地移植到非浏览器环境,如node.js
,undefined将始终未定义等等。
如果您未明确全局访问权限并且必须稍后尝试查找,则将后悔。如果你在全球注册一个事件处理程序(可能不是最好的主意),你肯定要记下它。
编辑:应该提到在严格模式下this
在全局范围内未定义。
答案 1 :(得分:0)
this
和window
不是一回事。根据上下文,this
可以引用任意数量的元素,而窗口始终表示窗口。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this了解详情
答案 2 :(得分:0)
你正在寻找什么论点;或多或少地输入两个字符不是它。
这个和窗口是不同的东西。答案 3 :(得分:0)
在Web浏览器的环境中,如果没有给出其他上下文,则this
引用Window对象。
使用Window
会使其不那么可疑,所以如果有必要,我会选择Window
。
请注意,出于性能原因,最好将eventlisteners添加到尽可能小的上下文中 如果只有部分DOM需要侦听事件,则无需在浏览器全局范围中添加eventlistener。
除了body元素上的事件监听器,用于删除例如。弹出窗口,我之前从未向Window对象添加eventlisteners。
答案 4 :(得分:0)
这是指您当前所在的任何代码块的父级。如果代码在click事件中,则“this”指的是调用该事件的控件。如果代码在页面加载时运行,则“this”指的是浏览器窗口。使用“窗口”可以使您所引用的内容更加明显,并使代码更具可读性。