嵌套函数如何在以后不声明的情况下访问Javascript中的变量?

时间:2018-11-15 23:23:47

标签: javascript

在下面的代码中,即使成功调用此函数后,传递给“ DPerson”函数的参数也将如何生存。如果这与堆栈和堆的工作方式有关,那么有人可以针对此示例进行更详细的解释。

我的理解是,需要在至少一个执行上下文中创建一个'var name =“ someValue”'属性,以在控制台日志中打印某些内容。但是显然我的理解是错误的。

function DPerson(name, age, job) {
  var o = new Object();

  o.sayName = function() {
    console.log(name);
  }

  return o;
}

var dperson1 = new DPerson("Ahu", 55, "Wild life expert");
dperson1.sayName();

2 个答案:

答案 0 :(得分:2)

您在这里看到的是closure。当您在另一个函数中定义一个函数时,子函数可以访问父级的词法环境,并且即使父级返回后也可以保留子级的词法环境。在创建name的参数时,在父级中定义了DPerson。子函数o.sayName对此具有访问权限,并在父函数返回后保留对其的访问。

有关更多信息,请参见MDN - closures

答案 1 :(得分:-1)

是的,即使函数结束后,javascript中的变量仍然存在。简而言之,函数是javascript中的作用域。