function消除紧密耦合

callee()和caller()的用法

  • obj.callee()是指向拥有obj这个对象的函数
  • .caller()指向被调用的函数
    在实现阶乘的时候我们有时会这样编码:
    1
    2
    3
    4
    5
    6
    function cheng(num) {
    if (num <= 1) {
    return 1
    } else {
    return num*cheng(num-1);
    }

这种函数名和函数执行耦合太紧密,为了避免这种问题,我们经常会这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function cheng(num) {
if (num <= 1) {
return 1;
} else {
return num*arguments.callee(num-1);
}
}
成功解决耦合紧密的问题.
同样如下:
```bash
function () {
inn();
}
function inn() {
alert(arguments.callee.caller)
}
out() // caller指向out()