官方定義 caller:呼叫目前正在執行的 function 的 function,簡言之就是,誰呼叫這個 function。
function a() {
return a.caller === b; // 一定要用 function name 去呼叫 caller
}
function b() {
return a();
}
console.log(b()); // true
caller 主要用途是追蹤呼叫堆疊,即追蹤 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 屬性在是禁止使用的。
---
---
---
沒有留言:
張貼留言