javascript - 嵌套函数如何在稍后访问 Javascript 中的变量而无需声明?

标签 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();

最佳答案

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

参见MDN - closures了解更多

关于javascript - 嵌套函数如何在稍后访问 Javascript 中的变量而无需声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329266/

相关文章:

javascript - 在 Angular 中,如何从指令访问我编译的模板?

javascript - 仅在 WKWebView 网页完全加载后运行注入(inject)的 JavaScript 脚本

javascript - 在提交时修改表单值但对用户隐藏

javascript - Jquery触发div高度变化事件(动画?)

javascript - 设置HTML进度条的innerHTML

javascript 按钮在文本上显示/隐藏已更改

javascript - 原子索引错误与从视频 currentTime 派生的 searchElement

javascript - React 中的奇怪分页

javascript - 带有切换日记条目的 HTML 日记 - Jquery 不工作

javascript - vue js中按特定名称过滤vcard