关键字: Javascript 闭包
说实话我还是不很理解这个闭包的概念,总的来说感觉闭包就是一个函数所要引用的执行环境~
好,先不废话,出题(厄,也是从网上搜罗来的):
var div = document.getElementById("testDiv");
var events = {onclick: "clicked", onchange: "changed", onmouseover: "mouse over"};
for(e in events){
div[e] = function(){
alert(events[e]);
};
}
上段代码所要表达的意思很明确,就是给这个testDiv加上3个事件处理函数,分别alert clicked,changed和mouse over. 但是实际运行的时候发现,不管哪个事件被触发,弹出来的alert都是 mouse over. 请问,到底哪里错了?该怎么改~
诸位先想,等会我会给出正确写法,虽然我自己也还不是很明白。
-----------------------------------------------------
我看到这段代码的时候大约能觉得他写错了,也知道哪里错了,但不知道错误的执行结果为什么是那样,也不知道该怎么写才对(我遇到过这种问题,都是使用一种不是很雅的方法解决的。)
好,正确的写法上场(前两句一样,所以只写不一样的部分):
for(e in events){
div[e] = function(e){
return function(){
alert(events[e]);
};
}(e);
}
诸位看官…… 那个,反正我是没太懂,晕呼了。 这个问题涉及到Javascript的闭包概念…… 而闭包的官方解释有太头像太拗口……没理解。
如果各位有什么比较容易理解的闭包解释,欢迎跟帖,不胜感激……