Javascript 功能顺序什么时候重要?

Javascript 功能顺序什么时候重要?,javascript,jquery,Javascript,Jquery,我知道JS在执行代码之前会对函数进行预编译。所以函数顺序并不重要。但是,在链接*.js文件时,函数顺序不知何故成了一个问题 比如说, <script src="@Url.Content("~/Scripts/Personal/MyJScript.js")" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () {

我知道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>

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


与其说是函数声明顺序的问题,不如说是加载顺序和时间的问题。

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

documentready的目的是保证DOM已经准备好,而不是保证所有的http调用都已完成,而且我相当确定通常的脚本阻塞在这种情况下不适用

值得一提的是,我重新创建了您的测试并成功运行了它,证明顺序无关紧要,这是一个计时/加载问题:


但我没有找到一个令人满意的解决方案:(

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

这些
标记在整个HTML中的何处?在
中?似乎每个*.js文件在下一个开始处理之前都已被完全处理>标记在正文中,
$(文档)。ready
在加载MyJScript 2.js之前执行。它是否正确地加载到myScript.js文件中?我在加载lol之前就这样做了,我觉得这应该可以按预期工作。即使
$(文档).ready
是在加载第二个脚本之前执行的,在知道整个初始DOM之前不应执行回调(即,解析器到达一个关闭的
标记或eof)。我认为问题一定出在MyJScript 2.js文件中。
<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>