你能在加载jQuery之前编写内联jQuery代码吗?

4
我认为这完全不可能,但我只是好奇,因为我的朋友在他的页面上有这个东西:
<html>
    <head></head>
    <body>
        <script>
            $(function(){
              // ...
            });
        </script>
        <div><span>html stuff</span></div>
        <script src="jquery-1.7.js"></script>
    </body>
</html>

我只是想知道,这样做是否有效?jQuery会在加载完成后处理$(function(){ });代码块吗?


7
它能吗?你说它在实时页面上... - GolezTrol
是的,在测试之后,它没有起作用。我想我真的很想知道是否可以在这里或通过测试更快地得到答案... 是的,我知道这很不光彩!但我能够更快地进行测试。我将来会避免这样的问题。 - trusktr
这个问题发生的频率足够高,因此有一个类似这样的问题可以引导人们非常方便。 - T.J. Crowder
1个回答

12
不,它不像你的朋友期望的那样工作,因为此时 $ 将是未定义的,所以调用带有参数 function(){ } 的函数 $ 会导致 JavaScript 错误,指出 $ 未定义。在尝试使用它之前,必须先加载 jQuery。
你的朋友可能会认为 $ 是特殊的,但是 $ 就像任何其他名称一样。例如:
function jQuery(){
 // do stuff
}
并且
function $(){
  // do stuff
}

将它们的定义放在外部文件中并不会使它们在加载之前可调用,仍会执行相同的操作。

顺便提一下:虽然不是严格不可能编写代码,在jQuery加载之前最终将使用它,但您将把代码放在仅在jQuery加载后才被调用的内容中。我不知道是否有任何jQuery约定这样做,因为在此库中这样做并不常见,但Facebook就是这样做的:https://developers.facebook.com/docs/reference/javascript/ 我认为在他更熟悉JavaScript之前,他不应该尝试这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接