什么是匿名函数和闭包 ? 函数我们最常见的是 function fn(){},这样的 申明 然后fn()调用这个函数 但是我们还有一种是表达式函数 var ss = function(){}这样的 也可以叫匿名函数 然后赋值给ss 其实这两种函数最主要的区别是 第一种是fn()在任何位置都可以调用函数 但是第二种在申明var ss =function(){}前调用这个函数 就会报错 因为找不到这个函数 其实第二种函数 很像我们申明一个变量一样 var s = 100; 在此申明s之前 用alt(s);也是肯定会报错 一样的道理!这是表达式函数 但是我们最常见的匿名函数是这样的格式:(function(){})(); 最后一个括号是指立即触发这个函数 !当然在最后括号里面可以传参,那么什么是闭包 闭包个人理解 可以分为一个简单的理解和复杂的函数理解!下面写个函数如下:

var s = "博主";

function a(){

var m = 44;

   alert(s); //当然会弹出“博主”;因为它是全局函数 在任何函数任何地方都可以访问,那么我在a函数内在写个函数

alert(k); //不能访问 因为k是b函数内的局部变量 那么外部函数是不能访问其他函数内的局部变量的

  function b(){

   var k=123; 

    alert(s);//也可以访问 

    alert(m);//可以正常访问 因为b函数在a函数内 那么相对于a函数来说 那么m是b函数的全局变量;

}

b();

}

a();//在最外面调用这个函数  

这上面是简单的闭包;那么是下面的复杂的理解javascript的闭包

 

  1. <script> 
  2. //在ECMAScript中,在函数声明处向函数外部看到的声明的所有变量,在函数内部都能访问到它们的最终值! 
  3.   function fnTest(arr) { 
  4.         for (var i=0;i < arr.length;i++) { 
  5.             arr[i]=function () { 
  6.                 alert(i+" | "+arr[i]); 
  7.             }; 
  8.         } 
  9.     } 
  10.     var arr = [0,1,2,3,4,5]; 
  11.     fnTest(arr); 
  12.     for (var i=0;i < arr.length;i++) { 
  13.         arr[i]();//始终输出6还有一个undefined 
  14.         //因为函数退出后,i值为6,所以访问到的值只有6 
  15.     } 
  16. </script> 

总之 闭包函数

闭包函数只能访问变量的最终值!!!