印象笔记迁移
匿名函数:
1function(){return 'dog';} //匿名函数直接运行报语法错误,无法调用
匿名函数赋值给变量:
1var box = function(){return 'dog';}; //可以2box();
通过自我执行来执行匿名函数:
1(function(){ //(匿名函数)();2return 'dog';3})(); //等于上面的程序
自我执行匿名函数的传参:
1(function(age){2return age;3})(20);
函数里的匿名函数:
1function box() {2 return function () { //闭包3 return 'dog';4 };5}6
7alert(box()()); //dog,执行普通函数里的匿名个函数,或者用下面的办法8var b = box(); //同上9alert(b());
闭包:闭包是在有权访问另一个函数作用于中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量 通过闭包返回局部变量:
1function box(){2var age = 100;3}4alert(age); //访问不到5function box(){6var age = 20;7return function(){8return age;9}10}11alert(box()()); //这种方式可以
使用闭包的优点和缺点:就是可以把局部变量驻留在内存中,可以避免使用全局变量
1//使用全局变量累加2var age = 100;3function box(){return age++;}4alert(age); //1005box();6alert(age); //1017
8//使用布局变量累加9function box(){var age = 100; age++; return age;}10alert(box()); //10111alert(box()); //10112
13//使用匿名函数实现局部变量驻留内存中14function box(){15 var age = 100;8 collapsed lines
16 return function(){return ++age;};17}18var b = box();19alert(b()); //10120alert(b()); //10221alert(age); //10122b = null;23alert(b);
作用域链的机制导致一个问题,在循环中里的匿名函数取得的任何变量都是最后一个值:
1function box() {2 var arr = [];3 for (var i = 0; i < 5; i++) {4 arr[i] = function () {5 return i;6 };7 }8 return arr;9}10
11//alert(box());12var b = box();13for (var i = 0; i < 5; i++) {alert(b[i]);}