函数调用上下文

Function-calling Context

本文关键字:上下文 函数调用      更新时间:2023-10-25

我认为下面的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()不知道在这两种情况下调用它的上下文,而不仅仅是其中一种?

上下文this的值。你没有使用它,所以它与你的问题无关。

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

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

在第二种情况下,CCD_ 14和CCD_。