计数函数实现

1
2
3
4
5
6
function counter(v) {...}
const c = counter(3)
console.log(c.add()) // 4
console.log(c.sub()) // 3
c.add()
console.log(c.add()) // 5

分析:
c.add,c.sub
可以通过点来调用函数,一种情况是prototype定义的,但是prototype定义的无法访问内部变量。
另一种情况是通过返回一个对象,对象内部为函数add,sub
如果是返回函数,则可以访问父作用域的变量。

实现:
通过返回函数,利用闭包内部函数可以访问父作用域的特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function counter(number) {
var sum=number;
return {
add(){
sum++;
return sum;
// console.log(sum);
},
sub(){
sum--;
return sum;
// console.log(sum)
}
}
}


const c = counter(3)
console.log(c.add()) // 4
console.log(c.sub()) // 3
c.add()
console.log(c.add()) // 5