官方定義 caller:呼叫目前正在執行的 function 的 function,簡言之就是,誰呼叫這個 function。
function a() { return a.caller === b; // 一定要用 function name 去呼叫 caller } function b() { return a(); } console.log(b()); // truecaller 主要用途是追蹤呼叫堆疊,即追蹤 function invoke chain。
function stack() { var s = []; for (var c = stack.caller; c; c = c.caller) { s.push(c.prototype); } return s; } function a() { return stack(); } function b() { return a(); } function c() { return b(); } console.log(c()); // [a, b, c] // c 呼叫 b,b 呼叫 a,a 呼叫 stack不過最重要的是,caller 不是標準,雖然大部分 Javascript engine 有實做,但最好還是不要用。
另外在 ECMAScript 5 的 strict mode,caller 屬性在是禁止使用的。
---
---
---
沒有留言:
張貼留言