jQuery里的$(function())为什么会改变执行顺序?

网页代码块如下:

...<script src="./js/main.js"></script><script>
    try {      window.RenderModel = {{ data|safe }};
    } catch (e) {
    }</script>...

后面这段内嵌代码是在页面加载是由后端(django)补全,传进来一些重要的参数。
然后,我的main.js里有这样一个变量:

var hasServer = typeof (window.RenderModel) !== 'undefined'

这个变量通过判断window.RenderModel是否存在来检测当前是否有服务器环境。
现在有一个小问题,虽然说可以解决,但是不明白其中的原理,所以请教一下各位高手。
hasServer这个变量在main.js里直接声明时,无论是否在服务器环境,window.RenderModel都被检测为undefined,因为main.js在内嵌代码前面执行,这一点是很显然的。但是,如果我将hasServer的声明放置在一个$(function())中,如这样:

$(function() {    var hasServer = typeof (window.RenderModel) !== 'undefined'
    ...
});

这个时候hasServer就可以正常判断`window.RenderModel了,产生这种区别的原因是什么?


红糖糍粑
浏览 1846回答 1
1回答

梵蒂冈之花

$(function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;doOtherThings(); }); doSomething();这段代码,你也许是觉得&nbsp;doOtherThings()&nbsp;会先执行,但实际是&nbsp;doSomthing()&nbsp;先执行。因为&nbsp;$()&nbsp;实际是&nbsp;$(document).ready()&nbsp;的简写,也就是说&nbsp;$()&nbsp;中的&nbsp;function&nbsp;是&nbsp;document.ready&nbsp;事件的回调函数。它要在 document 准备好了(加载完了)才执行。很显示,在到达当前 HTML 最后一句之前,文档都还没准备好,而写在&nbsp;$()&nbsp;外面的代码,是遇到即执行。所以&nbsp;doOtherThings()&nbsp;是在执行&nbsp;doSomehting()&nbsp;之前注册到 ready 事件中,但执行却在&nbsp;doSomething()&nbsp;之后。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript