javascript callee和caller屬性用法

admin發表於2017-03-24

本章節將會對標題中的兩個概念做一下簡單介紹,希望能夠對需要的朋友帶來一定的幫助。

一.callee屬性:

此屬性可以返回正在執行函式物件正文,就是函式的程式碼字串內容。

callee是arguments物件的一個屬性。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
[function.]arguments.callee

引數解析:

1.function:可選,函式的名稱。

2.arguments:具體可以參閱javascript的arguments物件一章節。

程式碼例項:

例項一:

[JavaScript] 純文字檢視 複製程式碼
function func(){
  var a=1;
  var b=2;
  var c=a+b;
}
console.log(func.arguments.callee);

上面的程式碼會報錯,這是因為callee屬性在函式執行的時候才會有效,歸根接地是隻有在函式執行的時候才會有arguments物件,否則是個空物件。

例項二:

[JavaScript] 純文字檢視 複製程式碼
function func(){
  var a=1;
  var b=2;
  var c=a+b;
  console.log(func.arguments.callee);
}
func();

上面的程式碼會輸出函式的原始碼。

例項三:

利用此屬性可以實現遞迴功能,如下:

[JavaScript] 純文字檢視 複製程式碼
var a=0; 
function func(){
  a=a+1;
  if(a>20) return; 
  arguments.callee();
}
func();
console.log(a);

二.caller屬性:

此屬性可以返回一個函式的引用,此函式呼叫了當前函式。

只有在函式執行的時候此屬性才是有效的。

如果函式是頂層呼叫,返回值是null。

如果在字串上下文中使用此屬性,那麼返回的就是函式的正文,也就是函式的字串程式碼。

例項程式碼:

例項一:

[JavaScript] 純文字檢視 複製程式碼
function func(){
  var a=2;
  var b=3;
  done()
}
function done(){}
console.log(done.caller)

上面的程式碼會返回一個空物件,只有當函式執行的時候此屬性才會有效。

例項二:

[JavaScript] 純文字檢視 複製程式碼
function func(){
  var a=2;
  var b=3;
  done()
}
function done(){
  console.log(done.caller)
}
func();

以上程式碼會輸出func函式的程式碼內容,因為console.log()函式要輸出的是一個字串,所以處於字串上下文環境中。

相關文章