日期:2014-05-16  浏览次数:20329 次

闭包问题?求大牛给个解释!

问题:
//methods.init(); //这样调用init方法,两个alert都会弹出,但中间的代码不起作用,求解释!
$(function() { methods.init(); });//这样调用中间代码就起作用了。
HTML代码:
HTML code


<select id="DDL_Country"></select>


JS代码:
JScript code

   (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(); });//这样调用中间代码就起作用了。
        })();      



------解决方案--------------------
(function(){})() 是立即执行。不知道执行的时候你的页面layout完成木有啊

你可以将这段代码放在页面底部试试。
------解决方案--------------------
$(function() { methods.init(); });//是DOM加载完成执行
(function(){})(); 是立即执行。
------解决方案--------------------
执行的顺序是这样的,这是规则吧。如果你页面没有加载完去取页面里的元素肯定是取不到的。