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