caller:返回被其餘函數的引用,簡單來講就是 我被誰給用了數組
call:把別人的方法附加到本身的身上,簡單來講就是我把某個對象的方法,用在了本身身上app
apply:和call的做用相似函數
callee:返回對自身的引用this
1 // caller 、call、applay、callee 2 3 /* 4 caller 5 6 Function 對象的caller屬性,屬性會返回一個調用該函數對象的外層函數引用。 7 8 */ 9 function A(){ 10 return A.caller; 11 } 12 function B(){ 13 return A(); 14 } 15 //調用B() 16 alert(B()); 17 /* 18 輸出內容 19 function A(){ 20 return A.caller; 21 } 22 */ 23 //當咱們在全局調用A()的時候(也就是說,它沒有任何外層函數)A.caller的值爲null 24 alert(A()); 25 /* 26 輸出內容 27 null 28 */ 29 30 31 /* 32 call和applay 33 34 讓當前對象去借用其餘對象中得方法,爲本身所用。 35 */ 36 var some_obj={ 37 name:'小明', 38 say:function(who){ 39 return '個人名字是'+who+', 我是'+this.name; 40 } 41 } 42 43 console.log(some_obj.say('黃曉明')); 44 /* 45 輸出 個人名字是黃曉明, 我是小明 46 */ 47 var my_obj={ 48 name:'小雞', 49 } 50 51 // var sayMsg=some_obj.say.call(my_obj,'山雞'); 52 // console.log(sayMsg); 53 /* 54 輸出 個人名字是山雞, 我是小雞 55 */ 56 57 58 59 /* 60 apply 用法和call相似,第二個參數爲數組形式 61 */ 62 var sayMsg=some_obj.say.apply(my_obj,['山雞']); 63 console.log(sayMsg); 64 /* 65 輸出爲 個人名字是山雞, 我是小雞 66 */ 67 68 /* 69 callee 70 71 arguments上的屬性(arguments.callee) 72 73 該函數在被調用時候返回對自身的引用 74 */ 75 function f(){ 76 return arguments.callee; 77 } 78 console.log(f()); 79 /* 80 輸出 爲 81 82 function f(){ 83 return arguments.callee; 84 } 85 */ 86 /* 87 用arguments.callee實現匿名函數的遞歸操做 88 */ 89 (function(count){ 90 if(count<5){ 91 console.log(count); 92 count+=1 93 //本身調用本身 94 arguments.callee(count); 95 } 96 })(1);