脚本标签似乎在移动设备上自动加载异步

时间:2017-01-11 22:47:50

标签: javascript

这是一个奇怪的。

我的页面中有几个带有内联代码的<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;

0 个答案:

没有答案