问题:
//methods.init(); //这样调用init方法,两个alert都会弹出,但中间的代码不起作用,求解释!
$(function() { methods.init(); });//这样调用中间代码就起作用了。
HTML代码:
<select id="DDL_Country"></select>JS代码:   (function() {
            var a = $("#DDL_Country"),
                   b = $("#DDL_Province"),
                   c = $("#DDL_City"),
                   data = { 1: { n: "中国" }, 2: { n: "美国"} };            var methods = {
                init: function() {
                    alert('这里测试弹出');
                    var aaa = '';
                    $.each(data, function(i, item) {
                        aaa += "<option>" + item.n + "</option>";
                    });
                    $("#DDL_Country").html(aaa);
                    alert('这里都弹出了,中间的还没执行?');
                }
            };
            //methods.init(); //这样调用init方法,两个alert都会弹出,但中间的代码不起作用,求解释!
            $(function() { methods.init(); });//这样调用中间代码就起作用了。
        })();      

解决方案 »

  1.   

    (function(){})() 是立即执行。不知道执行的时候你的页面layout完成木有啊你可以将这段代码放在页面底部试试。
      

  2.   

    放底部 就好了。你的意思是说 这种闭包写法 
    不会等DOM加载完毕后再去执行?
      

  3.   

    是的, 所有的js都是。而jquery 中的  $(function() { methods.init(); }) 会在dom载入完毕后,再执行。具体你可以看jquery的源码
      

  4.   

    $(function() { methods.init(); });//是DOM加载完成执行
    (function(){})(); 是立即执行。
      

  5.   

    (function(){})();是js语法规定的
    $(function() { methods.init(); });是jquery的语法
      

  6.   

    js的阻塞特性。浏览器执行js代码的时候,不能做其他任何事情。
    大多浏览器使用单一进程来处理用户界面(ui)更新和js脚本执行。js执行越长时间,浏览器等待响应的时间也越长。
    <script>很霸道 每次出现都让页面等待 .无论<script>是内嵌的,还是外链文件(src),页面的下载和渲染都要停下来,等待脚本执行完成。
    一个例子:document.write();可能会改变html结构。页面不等待的话 渲染的可能会出问题。------《高性能Javascript》第一章