匿名函数的用处

今天闲来无事,给大家说说匿名函数的用处

1.匿名函数用()包住

紧跟着用();实现(或者说编译)

 实例如下:

(function ()//使用匿名函数来隐藏全局变量
        {
            var msg="thank you";
            window.onunload=function(){
                alert(msg);
            };

        })();

这里的msg只能在内部访问

在外部是不能访问的,我们看到了其实js也有访问权限的

只是需要我们用特殊的方法来处理,大家可以试着在外面调用msg这个变量

验证其访问权限

2. 我曾经试过动态给元素添加对象

例如:<div id="test"><li></li> <li></li> <li></li></div>

var obj=document.getElementById("test") .getElementsByTagName("li");

obj是三个li的集合对象

到这里 我希望大家能自己尝试着给这个三个li加上事件 onmouseover,onmouseout :当鼠标滑过,背景色变成红色

。。。。。。

你实现了吗?如果没有实现看看下面的代码

 var obj=document.getElementById("main");//匿名函数解决函数只能引用外部循环变量的最后值问题
        var items=["click","keydown"];       
        for(var i=0;i<items.length;i++)
        {
            (function (){//#
                var item=items[i];
                obj["on"+item]=function(){
                    alert("thanks"+item);
                };
            })//#
            ();//#     如果这把三个"#"行的语句注释掉,不能够达到预期的效果

        }   

 

这问题其实我也不大懂什么原因,对js 的机制还是不很了解

不过 我希望大家能记住这个问题 以及解决这个问题的方法

 按照上面代码的注释:去掉带有#的三行代码

会发现并不能达到我们预期的效果

就是说,循环的变量i我们在

function(){
                    alert("thanks"+item);

                };

 里面是访问不到的 ,只能访问到最后的那个i值

用了匿名函数以后,问题解决了

 

 

注:闭包意味着内存函数可以引用存在于包围它的外围函数的变量,即使外层函数的执行已经终止,使用闭包的时候会遇到一个问题。

 闭包允许你引用父函数(就是包含它的外围函数)内的变量,但提供的值并非该变量创建的值

而是在父函数范围内最终的值


呵呵 匿名函数的用处大家了解一二了吧

js很深奥,有很多我们未知的秘密,需要我们去探寻

这也是我为什么这么喜欢它的原因

希望大家也能喜欢上它

----------和你们一起进步,和你们一起成长

posted @ 2009-01-06 11:42  mshybinbin  阅读(491)  评论(0)    收藏  举报