函数调用上下文

时间:2015-02-12 16:33:33

标签: javascript internet-explorer jscript

我认为下面的JavaScript会导致obj.fnentryPoint().

的上下文中运行

但是当obj.fn()运行时,会引发'locVar is undefined'异常。

  function entryPoint () {
    var locVar = "xxx";
    var obj    = {};

    PassRcvr(obj);

    obj.fn();

  }

  function PassRcvr(passedObj) { // Being an object, the arg is passed by reference.
    passedObj.fn = function  () {
      alert(locVar);
    }
  }

下面的JScript,但 locVar.

的意识运行
  function entryPoint () {
    var locVar = "xxx";
    var obj = {};

    PassRcvr(obj);

    obj.fn();

    function PassRcvr(passedObj) {
        passedObj.fn = function  () {
        alert(locVar);
      }
    }

  }

为什么obj.fn()不知道在这两种情况下调用它的上下文,而不仅仅是那个?

2 个答案:

答案 0 :(得分:1)

上下文this的值。您没有使用它,因此它与您的问题无关。

未传递范围。函数保持声明的范围(这就是为什么我们可以在JS中使用闭包)。由于在第一个示例中PassRcvr未定义entryPoint,因此它无法访问范围为entryPoint的变量。

答案 1 :(得分:1)

在第一种情况下,PassRcvr位于全局范围内,而locVar位于entryPoint函数的本地范围内 - 这就是无法访问它的原因。

在第二种情况下,PassRcvrlocVar都在一个本地范围内。