我在一个大型代码库中工作并遇到了这个文件,其中包含以下内容:
window.hasTouch = (function() {
// will return 'true' if user is visiting with a touch-capable device
return ('ontouchstart' in document.documentElement);
});
然后在另一个文件中以下列方式调用window.hasTouch:
hasTouch = window.hasTouch();
我的问题是,有时在控制台中,用()调用它会返回错误:
TypeError: boolean is not a function
然后当我按照" hasTouch = window.hasTouch" (parens省略),它像我想要的那样返回true / false。
有人可以在此设置中澄清一下调用window.hasTouch的理想方式吗?
答案 0 :(得分:1)
通过全局分配hasTouch
,您会覆盖window.hasTouch
,以便该功能丢失。如果您想避免这种情况,请在函数内使用var hasTouch = ...
。
此外,您的代码不是IIFE - 您只需将功能分配给window.hasTouch
。在函数定义之后,IIFE将()
立即调用它并指定其返回值。
答案 1 :(得分:0)
如果您希望window.hasTouch
成为bool而不是函数,您只需执行以下操作:
window.hasTouch = 'ontouchstart' in document.documentElement;
否则,您可以立即评估匿名函数:
window.hasTouch = (function() {
// will return 'true' if user is visiting with a touch-capable device
return ('ontouchstart' in document.documentElement);
})(); // <-- note the extra parens