1、探测调用者:

>> var f=function(b,c,d){var x=b+c+d;console.log(f.caller);return x;}
undefined
>> f(1,2,3)
function (evalFunction, object, objectGroup, expression, 
  isEvalOnCallFrame, injectCommandLineAPI)
{
  // Only install command line api object 
  // for the time of evaluation.
  // Surround the expression in with statements
  // to inject our command line API so that
  // the window object properties still take
  // more precedent than our API functions.

  try {
    if (injectCommandLineAPI && inspectedWindow.console) {
      inspectedWindow.console._commandLineAPI = 
        new CommandLineAPI(this._commandLineAPIImpl, 
          isEvalOnCallFrame ? object : null);
      expression = "with ((window && window.console && " +
             "window.console._commandLineAPI) || {}) +
             "{\n" + expression + "\n}";
    }
    var result = evalFunction.call(object, expression);
    if (objectGroup === "console")
      this._lastResult = result;
    return result;
  } finally {
    if (injectCommandLineAPI && inspectedWindow.console)
      delete inspectedWindow.console._commandLineAPI;
  }
}

2、探测自己:

>> var f=function(b,c,d){ var x=b+c+d;console.log(f.arguments.callee);return x; }
undefined
>> f(1,2,3)
function (b,c,d){var x=b+c+d;console.log(f.arguments.callee);return x;}
6

js的这种动态获取执行环境的信息,可以用于多种安全用途,对caller的探测可以作为某种sniffer识别浏览器,对callee的探测则有着更广泛的用途,如用于js混淆/加壳。