在下面的代码中,即使在对该函数的调用成功结束后,传递给“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();
最佳答案
您在这里看到的是一个闭包
。当您在另一个函数中定义一个函数时,子函数可以访问父函数的词法环境,并且即使在父函数返回后也可以保留该环境。 name
是在您为 DPerson
创建参数时在父级中定义的。子函数 o.sayName
可以访问此函数,并在父函数返回后保留对其的访问权。
参见MDN - closures了解更多
关于javascript - 嵌套函数如何在稍后访问 Javascript 中的变量而无需声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329266/