什么是匿名函数和闭包 ? 函数我们最常见的是 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的闭包
<script>
//在ECMAScript中,在函数声明处向函数外部看到的声明的所有变量,在函数内部都能访问到它们的最终值!
function fnTest(arr) {
for (var i=0;i < arr.length;i++) {
arr[i]=function () {
alert(i+" | "+arr[i]);
};
}
}
var arr = [0,1,2,3,4,5];
fnTest(arr);
for (var i=0;i < arr.length;i++) {
arr[i]();//始终输出6还有一个undefined
//因为函数退出后,i值为6,所以访问到的值只有6
</script>
总之 闭包函数
闭包函数只能访问变量的最终值!!!
本文转自 涂根华 51CTO博客,原文链接:http://blog.51cto.com/tugenhua/735856,如需转载请自行联系原作者