在移动网站上,我有一些看起来像这样的JavaScript代码:
<script type="text/javascript">
(function() {
// function body omitted
}());
</script>
我第一次加载页面时会执行代码,但是如果我回到上一页,再次加载此页面,则不会再次执行。只有在旧版Android浏览器上加载User-Agent标题:
时才会发生这种情况Mozilla / 5.0(Linux; U; Android 2.2.1; en-gb; GT-S5570 Build / FROYO)AppleWebKit / 533.1(KHTML,类似Gecko)版本/ 4.0 Mobile Safari / 533.1
在较新的Android手机上,使用User-Agent标题:
Mozilla / 5.0(Linux; Android 4.2.1; Galaxy Nexus Build / JOP40D)AppleWebKit / 535.19(KHTML,与Gecko一样)Chrome / 18.0.1025.166 Mobile Safari / 535.19
每次加载页面时都会执行代码。这是旧版浏览器的已知问题吗?另外,
之间究竟有什么区别(function() {
// function body omitted
}());
和
function() {
// function body omitted
}();
答案 0 :(得分:1)
至少回答第二个问题,因为我一直看到人们使用像这样的函数表达式
(function () {...}())
有两(3)种功能:
无法直接调用函数声明。但是可以调用作为表达式结果的函数。
语法上正确调用的函数表达式看起来像
(function() {
// function body omitted
})();
在这种情况下,函数通过将其括在括号中然后被调用而成为表达式。 然而
(function() {
// function body omitted
}());
也可以,因为分组操作符(
被放在函数周围,这会自动使它成为函数表达式(可调用)因此你可以通过放置一个函数来调用函数()
直接在函数体
但这似乎是误导人,像
这样的结构function() {
// function body omitted
}();
也是有效的,但事实并非如此,因为缺少分组操作符而不是告诉解释器它的表达式。因此它一直是一个函数声明,可以直接调用 。
这是一个很好的Article,它解释了这三种类型非常好