文章出處
文章列表
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屬性賦值,否則會導致錯誤。
文章列表
全站熱搜