文章出處

ECMAScript5規范了函數對象的屬性:caller.除了Opera的早期版本不支持,其他瀏覽器都支持這個ECMAScript3并沒有定義的屬性。

[IE,Firefox,Chrome,Safari的所有版本以及Opera9.6都支持caller屬性]

這個屬性保存著調用當前函數的函數的引用,如果是在全局作用域中調用當前函數,它的值為null。

functionName.caller 返回調用者。 

eg:   

1 function outer(){
2    inner();
3 }
4 function inner(){
5    alert(inner.caller);
6 }
7 outer();

以上代碼會導致警告框顯示outer()函數的源代碼。因為outer()調用了inner(),所以inner.caller()就指向outer()。為了實現更松散的耦合,也可以通過argument.callee.caller來訪問相同的信息。

callee   返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文. callee是arguments 的一個屬性成員,它表示對函數對象本身的引用,這有利于匿名 

在函數的嚴格模式下運行時,訪問argument.callee會導致錯誤,ECMAScript5還定義了argument.callee屬性,嚴格模式下會導致錯誤,非嚴格模式下這個屬性始終是undefined。這些變化都是為了加強語言的安全性,這樣第三方代碼就不能在相同的環境里窺視其他代碼了。

嚴格模式還有一個限制:不能為函數的caller屬性賦值,否則會導致錯誤。


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()