此代码来自http://twitter.github.com/
(function ($, undefined) {
// more code ...
$.getJSON("https://api.github.com/orgs/twitter/members?callback=?", function (result) {
var members = result.data;
$(function () {
$("#num-members").text(members.length);
});
});
// more code ...
})(jQuery);
首先,我了解的事情:
- 所有代码都封装在 IIFE 中
- 他们使用 Github API 来获取成员
- URL 包含字符串“?callback=?”因此请求被视为 JSONP。
我不明白的是:为什么他们在请求成功时执行的函数中使用 $(function() ...
。
这段代码等效吗?
$(function() {
$.getJSON("https://api.github.com/orgs/twitter/members?callback=?", function (result) {
var members = result.data;
$("#num-members").text(members.length);
});
});
也许我错了,但我认为第二个代码片段等待文档加载,然后请求成员......所以不存在并行性?在第一个代码片段中,请求与文档加载并行完成。如果我错了,请纠正我。
最佳答案
如果向 $
函数传递一个函数作为其参数(这是一个严重重载的函数),它将在 DOM 准备好时调用该函数。
将其放置在那里会阻止内部代码(尝试修改 DOM)在 DOM 完成之前运行。
如果在调用 $
之前 DOM 已经完成,那么该函数将立即被调用。
请注意,getJSON
发送的 HTTP 请求可能在浏览器完成加载和解析原始文档的 DOM 之前或之后获得响应。
这允许发送数据请求而无需等待 DOM 准备好,同时仍然防止过早修改。
Is this code equivalent?
不。它会等待 DOM 准备好,然后再发送数据请求。
关于javascript - 理解 JavaScript 代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683107/