在下面的代码中,即使成功调用此函数后,传递给“ 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();
答案 0 :(得分:2)
您在这里看到的是closure
。当您在另一个函数中定义一个函数时,子函数可以访问父级的词法环境,并且即使父级返回后也可以保留子级的词法环境。在创建name
的参数时,在父级中定义了DPerson
。子函数o.sayName
对此具有访问权限,并在父函数返回后保留对其的访问。
有关更多信息,请参见MDN - closures
答案 1 :(得分:-1)
是的,即使函数结束后,javascript中的变量仍然存在。简而言之,函数是javascript中的作用域。