这是一个奇怪的。
我的页面中有几个带有内联代码的<script>...</script>
标记用于逻辑分隔代码段。例如:<script id='prepareA'>...</script>
<script id='docReadyStuff'>...</script>
。
现在,正在发生的事情是,有时在脚本标记中声明的函数在另一个函数中不可见,即使函数脚本标记在代码之前出现。
为了更好地解释这一点,请考虑以下代码:
<script>
function DoSomething() {
alert("something");
}
</script>
<script id=blockA>
function Foo() {
$("#btn").on("click", function() {
alert("calling DoSomething");
DoSomething();
});
}
</script>
<script>
$(function() {
// Calling Foo() from within
// ready, so any access to DOM from Foo
// *should* be safe!
Foo();
});
</script>
现在,在每个桌面浏览器上,这都可以。但是,对于 iPhone 的移动Chrome和Safari,当按下按钮btn
时,它会显示DoSomething is undefined
。在Android上它运行正常。
我不知道为什么会发生这种情况,因为在按钮事件处理程序附加事件之前,DoSomething是明确定义的。现在,如果我将DoSomething
移动到定义Foo
之前的行,那么它就可以了。
有人可以解释这种行为吗?
* iPhone 5s,iOs 9.3.5;移动Chrome 55.0.2883.79;