js中的匿名函数与必包

    之前就看过关于js中匿名函数与闭包的文章,始终是不太明白,今天看《JavaScript高级编程第二版》时又看到了这方面的介绍,终于弄懂了。

    所谓匿名函数就是没有名字的函数,也叫lamda函数,这不是js所有的,其它很多高级编程语言都有匿名函数。正常情况下函数应该这样定义:

1 function fun1(){
2      alert("这是一个正常的函数");
3 }
View Code

这就是函数的声明与实现。而匿名函数是这样定义的:

1 var fun1 = function(){
2      alert("这是一个匿名函数");
3 }
源代码

 从以上的比较中可以看出来,匿名函数没有名字,只有把它赋值给一个变量,才能在以后的代码中调用的(注意这里的以后两个字,因为匿名函数在定义时就可以执行,只要在最后加上圆括号就可以)。匿名函数主要是当做一个参数传递给其它函数。

     闭包是有权访问另一个函数作用域中的变量的函数。如下:

function createFun(name){
    return function () {
        alert(name);
    };
}

var fun1 = createFun("test");
fun1();

createFun函数执行时返回一个函数,并赋值给变量fun1,然后执行这个函数。但是正常情况下,这个返回的函数在执行时,是没有name这个变量的,但是因为闭包,所以它可以访问,其实这里是因为这个返回的函数内有一个作用域链,所以可以访问创建它的函数的作用域中的变量。

 

 

    

posted @ 2015-08-14 14:18  carrot_hlb  阅读(297)  评论(0编辑  收藏  举报