js callee與caller

admin發表於2017-03-14

這兩個屬性的使用算是比較頻繁,本章節將會簡要的做一下介紹,希望能夠給需要的朋友帶來或多或少的幫助。

一.caller屬性:

此屬性可以返回函式的呼叫者,為了更好的理解和記憶此函式,有必要從它的名稱下手,caller的英文意思是"呼叫者"後者"呼叫者"。

下面看一段例項程式碼:

[JavaScript] 純文字檢視 複製程式碼
function func(){ 
  if(func.caller) { 
    console.log(func.caller.toString()); 
  } 
  else{ 
    console.log("函式直接執行"); 
  } 
} 
function handleCaller() { 
  func(); 
} 
handleCaller(); 
func();

以上程式碼中,第一個函式handleCaller()執行會輸出func函式的呼叫也就是:

[JavaScript] 純文字檢視 複製程式碼
function handleCaller() { 
  func(); 
}

第二個函式func()執行會輸出"函式直接執行",因為它的執行沒有呼叫者。

二.callee屬性:

此屬性返回正在被執行的Function物件。它的英文意思是"被召者"。

它是argument物件的一個屬性,它表示對函式物件本身的引用,這有利於匿名,下面先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function calleeLengthDemo(argOne,argTwo) { 
  console.log(arguments.callee.toString()); 
  if(arguments.length==arguments.callee.length) { 
    console.log("驗證形參和實參長度正確!"); 
    return; 
  } 
  else\0{ 
    console.log("實參長度:" + arguments.length); 
    console.log("形參長度:" + arguments.callee.length); 
  } 
} 
calleeLengthDemo(1);

以上程式碼中,console.log(arguments.callee.toString())可以輸出calleeLengthDemo()函式,大家要注意的是Function物件的length屬性會返回函式的形引數量。console.log("實參長度:" + arguments.length)會輸出傳入函式的實引數量,console.log("形參長度:" + arguments.callee.length)輸出形引數量。

相關閱讀:

arguments可以參閱javascript arguments一章節。

相關文章