一、在es5中,函数中有arguments参数,该参数是一个包含函数传入的参数的类数组。
1 <script> 2 function myArrgu(x){ 3 console.log(arguments); 4 } 5 myArrgu(1,2,3) 6 </script>
我们在输出arguments的时候,我发现一个属性callee,这个属性,在非严格模式下使用。在严格模式下会报错。
arguments.callee指向当前arguments指向的函数。
在特定情况下,我们在使用这个属性的时候,在函数递归或者其他地方使用的时候,可以不使用函数名变量来进行调用。
1 function diplus(num){ 2 if(num==1){ 3 return 1; 4 }else{ 5 return num*diplus(num-1); 6 } 7 } 8 console.log(diplus(4));
如上是简单的阶乘函数。但是我们在递归的时候是使用函数名的引用。函数名和这个函数紧紧耦合在一起。我们如果使用arguments.callee的时候,就会解决这个耦合性。
1 function diplus(num){ 2 if(num==1){ 3 return 1; 4 }else{ 5 return num*arguments.callee(num-1); 6 } 7 } 8 var funcA=diplus; 9 diplus=function(){ 10 return 0; 11 } 12 console.log(funcA(2)); 13 console.log(diplus(4));