天天看點

原生js 函數 callee屬性

一、在es5中,函數中有arguments參數,該參數是一個包含函數傳入的參數的類數組。

1     <script>
2         function myArrgu(x){
3             console.log(arguments);
4         }
5         myArrgu(1,2,3)
6     </script>      
原生js 函數 callee屬性

我們在輸出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));      
原生js 函數 callee屬性

學習是一種态度,堅持是質變的利器!