函数调用上下文

Function-calling Context

我认为下面的 JavaScript 会在 entryPoint().

的上下文中导致 obj.fn 到 运行

但是当obj.fn()运行s时,会引发'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()在两种情况下都不知道调用它的上下文,而不仅仅是一个?

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

范围未通过。函数保留它声明的作用域(这就是我们可以在 JS 中使用闭包的原因)。由于在第一个示例中 PassRcvr 未在 entryPoint 内定义,因此它无法访问作用域为 entryPoint.

的变量

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

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