使用首先檢查它是否已被定義的函數會在任何Webkit瀏覽器下出現問題。 有時我使用js模塊A中的函數,而在另一個應用程序中,我希望使用與模塊B具有相同名稱(但代碼略有不同)的相同函數。 我通過typeof運算符來解決此問題,以檢查它是否「未定義」。 下面的例子(爲了清晰起見,在一個文件中)顯示了我所做的。WEBKIT:if(0)中定義的javascript函數調用
<!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),船Android瀏覽器,Safari瀏覽器(OSX)始終儘管它如果(假)條件之間不能進行最後定義的函數被調用。 當我們刪除這個時,儘管函數在前面定義過,但typeof「undefined」之間的第二個定義被調用。
在Firefox(OSX,Android)下,它正確調用第一個函數。
這是Webkit引擎中的錯誤還是我忽略了一些東西?
這是很簡單,簡潔,謝謝。 –