闭包:函数中返回另一个函数,打破作用域的限制,使局部变量在全局中使用
for循环没有块级作用域
需求:在for循环外逐个打印出i
for (var i = 0; i < 5; i++) {
setTimeout(fn(), 1000*i,i);
}
function fn() {
return function (j) {
console.log(j);
};
}
递归:函数中调用函数本身(需要入口和出口,否则进入死循环)
// 阶乘: 3! 3*2*1
// 需求: 求n的阶乘(函数封装)
function fn(n) {
// return 3*2*1;
// 需要一个出口
if (n <= 1) {
return 1;
}
return n * fn(n - 1); // 入口
/*
3*fn(2)
3*2*fn(1)
3*2*1
*/
}
console.log(fn(10));