之前就看过关于js中匿名函数与闭包的文章,始终是不太明白,今天看《JavaScript高级编程第二版》时又看到了这方面的介绍,终于弄懂了。
所谓匿名函数就是没有名字的函数,也叫lamda函数,这不是js所有的,其它很多高级编程语言都有匿名函数。正常情况下函数应该这样定义:
1 function fun1(){ 2 alert("这是一个正常的函数"); 3 }
这就是函数的声明与实现。而匿名函数是这样定义的:
1 var fun1 = function(){ 2 alert("这是一个匿名函数"); 3 }
源代码
从以上的比较中可以看出来,匿名函数没有名字,只有把它赋值给一个变量,才能在以后的代码中调用的(注意这里的以后两个字,因为匿名函数在定义时就可以执行,只要在最后加上圆括号就可以)。匿名函数主要是当做一个参数传递给其它函数。
闭包是有权访问另一个函数作用域中的变量的函数。如下:
function createFun(name){ return function () { alert(name); }; } var fun1 = createFun("test"); fun1();
createFun函数执行时返回一个函数,并赋值给变量fun1,然后执行这个函数。但是正常情况下,这个返回的函数在执行时,是没有name这个变量的,但是因为闭包,所以它可以访问,其实这里是因为这个返回的函数内有一个作用域链,所以可以访问创建它的函数的作用域中的变量。
时间: 2024-10-10 01:13:45