使用首先检查是否已定义的函数在任何 Webkit 浏览器下都会出现问题。有时我使用 js 模块 A 中的函数,而在另一个应用程序中,我想使用模块 B 中具有相同名称(但代码略有不同)的相同函数。我通过 typeof 运算符解决了这个问题,以检查它是否“未定义”。下面的示例(为了清楚起见,所有内容都在一个文件中)显示了我的工作。
<!DOCTYPE html>
<html>
<head>
<title>Javascript function definition test</title>
<script type="text/javascript">
// actually in module A.js
function foo()
{
alert("This is the first function.");
}
// actually in module B.js
if (typeof(foo)=="undefined") {
function foo()
{
alert("This is the second function when foo() is undefined.");
}
}
// This definition SHOULD be ignored in all cases but Webkit does run this despite the if (false) !!
if (false) {
function foo()
{
alert("This is the third function when foo() is defined within if (false).");
}
}
</script>
</head>
<body>
<script type="text/javascript">
foo();
</script>
</body>
</html>
我发现在 Chrome (android 和 OSX)、Boat Browser (Android)、Safari (OSX) 中总是调用最后一个定义的函数,尽管它在 if (false) 条件之间被禁用。当删除它时,尽管该函数已在前面定义,但仍会调用 typeof "undefined" 之间的第二个定义。
在 Firefox (OSX, Android) 下,它正确调用了第一个函数。
这是 Webkit 引擎中的错误还是我忽略了什么?