我是靠谱客的博主 甜甜美女,最近开发中收集的这篇文章主要介绍arguments.callee Function.callee arguments.caller总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
arguments.callee
arguments主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个argumens对象的函数。
arguments.callee在解决递归的函数名问题时,有很大的作用。
下面是一个很经典的递归阶乘函数
function factorial(num) { if (num<=1) { return 1; }else { return num*factorial(num-1); } }
但是下面的代码会让它出错:
var anotherFactorial = factorial; factorial = null; alert(anotherFactorial(4));//报错
因为调用anotherFactorial的时候,内部需要再次调用factorial,然而factorial已被置于null。
那么,我们使用arguments.callee指向factorial函数本身,消除这种紧密的耦合,则可以实现了。并且这个方法在需要改动函数名的时候,还可以减少代码的修改量。
function factorial(num) { if (num<=1) { return 1; }else { return num*arguments.callee(num-1); } }
但是在严格模式下,不能通过脚本访问arguments.callee,还可以使用命名函数表达式达成上述相同的效果:
var factorial = (function f(num) { if (num<=1) { return 1; }else { return num*f(num-1); } });
Function.caller
这个属性保存着调用当前函数的函数的引用 ,如果是在全局作用域中调用当前函数,它的值为null。
function inner() { console.log(inner.caller); //打印出outer函数 } function outer() { inner(); } outer();
function inner() { console.log(arguments.callee.caller); //同样打印出outer函数 } function outer() { inner(); } outer();
arguments.caller
已过时,严格模式下访问它会导致错误,非严格模式下这个属性始终是undefined。它用来表示调用当前正在执行的函数的函数。MDN上显示此属性已被删除,不再有效。
end
转载于:https://www.cnblogs.com/xiaokeai0110/p/9696402.html
最后
以上就是甜甜美女为你收集整理的arguments.callee Function.callee arguments.caller总结的全部内容,希望文章能够帮你解决arguments.callee Function.callee arguments.caller总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复