7.1 递归
7.2 闭包
7.2.1 闭包与变量
7.2.2 关于this 对象
7.2.3 内存泄漏
7.2 闭包
7.2.1 闭包与变量
7.2.2 关于this 对象
7.2.3 内存泄漏
7.3 模仿块级作用域
7.4 私有变量
7.4.1 静态私有变量
7.4.2 模块模式
7.4.3 增强的模块模式
7.4 私有变量
7.4.1 静态私有变量
7.4.2 模块模式
7.4.3 增强的模块模式
书上给的例子是:(还有一个用argument.callee的,但是在严格模式下 strict mode,无法访问这个属性)
var factorial = (function f(num){ if (num <= 1){ return 1; } else { return num * f(num-1); } });
网上还有一个相类似的:
var factorial=function factorial(i,a){ a=a||1; if(i<2){ return a; } return factorial(i-1,a*i); };
网上还有个比较经典的汉诺塔hanoi的:
var hanoi=function(disc,src,aux,dst){ if(disc>0){ hanoi(disc-1,src,dst,aux); document.writeln('Move disc '+disc+' from '+src+' to '+dst); document.writeln('<br/>'); hanoi(disc-1,aux,src,dst); } }
根据书上里规范改写为:
var hanoi = (function f(disc,src,aux,dst){ if(disc>0){ f(disc-1,src,dst,aux); document.writeln('Move disc '+disc+' from '+src+' to '+dst); document.writeln('<br/>'); f(disc-1,aux,src,dst); } });
(重点来了,按照书上的例子改写,这样更加有利于延展。。。哈哈哈)
var s = hanoi; hanoi = null; s(3,'Src','Aux','Dst');