function中的callee和caller
在函数内部,arguments是一个类数组对象,用于保存函数参数。
这次主要简述一下arguments内部存在的2个属性:callee,caller
callee:
callee:是一个指针,指向拥有这个arguments对象的函数,
例子:
function cool(){console.log(arguments.callee);
}cool();//结果打印出来(chrome下):
ƒ cool(){console.log(arguments.callee);
}
利用callee指针的特性,我们可以用来做阶乘之类的逻辑处理:
下面是最基本常见的阶乘,
function add(num){if(num<=1){return 1;}else{return num * add(num-1);}
}add(10); //3628800
上面的阶乘有个最大的问题就是,函数内部的执行与函数名add耦合在一起,可以用arguments.callee来消除这种耦合:
function add(num) {if(num <= 1){return 1;}else{return num * arguments.callee(num-1);}
}
add(10); //3628800
caller:
caller保留着调用当前函数的函数的引用。
function add() {addChild();
}function addChild() {console.log(addChild.caller);
}add();//在chrome下打印结果:
ƒ add() {addChild();
}
为了实现低耦合,可以用arguments.callee来实现:
function add() {addChild();
}function addChild(argument) {console.log(arguments.callee.caller);
}add();//在chrome下打印结果:
ƒ add() {addChild();
}
*如果是在全局作用域下调用该函数,caller为null。
function add() {console.log(arguments.callee.caller);
}add(); //null
注意:
arguments.callee在严格模式下会导致错误;- 不能为
caller赋值,否则报错; ECMAScript5还定义了arguments.caller,严格模式下会导致错误,非严格模式下是undefined- 定义
arguments.callee是为了区分arguments.caller和函数的caller属性。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
