功能订单何时重要?

时间:2011-11-16 19:59:37

标签: javascript jquery

我理解JS在执行代码之前会对函数进行预编译。所以功能顺序无关紧要。但是,在链接* .js文件时,函数顺序会以某种方式成为问题。

例如,

<script src="@Url.Content("~/Scripts/Personal/MyJScript.js")" type="text/javascript"></script>


<script type="text/javascript">
    $(document).ready(function () {
        hello();
        afterCall();
        hello2(); //fails, defined in MyJScript2.js

    });

    function afterCall() {
        alert('inline function defined after call');
    }
</script>

<script src="@Url.Content("~/Scripts/Personal/MyJScript2.js")" type="text/javascript"></script>

在上面的代码中,函数hello2()在定义调用后链接的文件中定义。通话失败。所以,直觉上我假设现在功能顺序 在这种情况下很重要。

考虑到我执行$(document).ready,文档应该尽可能准备好。那么,为什么会这样呢?

<小时/> 根据要求,这是客户端HTML

<body>
    <script src="/Scripts/Personal/MyJScript.js" type="text/javascript"></script>


<script type="text/javascript">
    $(document).ready(function () {
        hello();
        afterCall();
        hello2(); //fails

    });

    function afterCall() {
        alert('inline function defined after call');
    }
</script>

<script src="/Scripts/Personal/MyJScript2.js" type="text/javascript"></script>

</body>

3 个答案:

答案 0 :(得分:1)

我认为问题不是顺序,而是$(document).ready在返回js内容之前执行,因此函数在被调用时尚未加载。

准备好的文档旨在保证DOM的准备,而不是所有的http调用都已完成,而且我非常确定通常的脚本阻止在这种情况下不适用。

为了它的价值,我重新创建了测试并成功运行,证明顺序无关紧要,这是一个时间/加载问题:http://havenshade.com/tmp/testalert.html

我找不到一个快乐的解决方案:(

答案 1 :(得分:0)

在外部JS文件的其他请求完成之前,可能会执行(或尝试)正文中的脚本标记。

与负载顺序和时间相比,它不是函数声明顺序的问题。

答案 2 :(得分:0)

您可以使用getScript来获取脚本并在成功回调中执行某些功能,而不是使用脚本标记来导入MyJscript2。