【发布时间】:2021-02-13 20:22:08
【问题描述】:
我之前在学习闭包时遇到了这个关于模块模式的函数,据我了解,这感觉就像一个闭包,因为 Salary 仍在范围内,对象返回的方法仍在范围内,但其他变量仍在范围内作为闭包,例如name 和 age 还是在对象返回后被销毁?我认为因为对象引用了这些变量,所以可能所有变量都作为闭包的一部分保持活动状态,但不确定。
function EmployeeDetails() {
var name: "Mayank";
var age = 30;
var designation = "Developer",
var salary = 10000;
var calculateBonus = function(amount) {
salary = salary + amount;
}
return {
name: name,
age: age,
designation: designation,
calculateBonus: calculateBonus
}
}
var newEmployee = EmployeeDetails()
var userName = newEmployee.calculateBonus(1000);
【问题讨论】:
-
还在什么范围内?如果您将此作为方法调用,它会运行并退出。
-
因此,据我所知,闭包是内部函数/对象对外部父对象的引用。在这种情况下,返回的对象是否维护对 EmployeeDetails 函数范围内的所有变量的引用?如果这个问题没有意义,换一种说法,你会说在上面的代码中应用了任何闭包,如果是,哪些位?谢谢,只是想更好地理解闭包
标签: javascript function object closures