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

a157147899 2012-02-03 03:55:11

问题:
//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(); });//这样调用中间代码就起作用了。
})();
...全文
108 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
laidezhong 2012-02-03
  • 打赏
  • 举报
回复
js的阻塞特性。浏览器执行js代码的时候,不能做其他任何事情。
大多浏览器使用单一进程来处理用户界面(ui)更新和js脚本执行。js执行越长时间,浏览器等待响应的时间也越长。
<script>很霸道 每次出现都让页面等待 .无论<script>是内嵌的,还是外链文件(src),页面的下载和渲染都要停下来,等待脚本执行完成。
一个例子:document.write();可能会改变html结构。页面不等待的话 渲染的可能会出问题。

------《高性能Javascript》第一章
a157147899 2012-02-03
  • 打赏
  • 举报
回复
算了 我去看下闭包吧,多谢各位
licip 2012-02-03
  • 打赏
  • 举报
回复
执行的顺序是这样的,这是规则吧。如果你页面没有加载完去取页面里的元素肯定是取不到的。
Acesidonu 2012-02-03
  • 打赏
  • 举报
回复
(function(){})();是js语法规定的
$(function() { methods.init(); });是jquery的语法
a157147899 2012-02-03
  • 打赏
  • 举报
回复
能解释一下为什么吗?
Acesidonu 2012-02-03
  • 打赏
  • 举报
回复
$(function() { methods.init(); });//是DOM加载完成执行
(function(){})(); 是立即执行。
laidezhong 2012-02-03
  • 打赏
  • 举报
回复
是的, 所有的js都是。

而jquery 中的 $(function() { methods.init(); }) 会在dom载入完毕后,再执行。

具体你可以看jquery的源码
a157147899 2012-02-03
  • 打赏
  • 举报
回复
放底部 就好了。

你的意思是说 这种闭包写法
不会等DOM加载完毕后再去执行?
laidezhong 2012-02-03
  • 打赏
  • 举报
回复
(function(){})() 是立即执行。不知道执行的时候你的页面layout完成木有啊

你可以将这段代码放在页面底部试试。
a157147899 2012-02-03
  • 打赏
  • 举报
回复
在线等了!!!

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧