一、在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));
學習是一種态度,堅持是質變的利器!