对象与函数都可以用来实现闭包。闭包的本质是在函数内部创建一个能访问到父级作用域中变量的函数,并将该函数作为返回值返回。使用对象来实现闭包,实际上就是在对象内部创建一个能访问到对象中属性的函数,并将该函数作为对象的方法返回。与使用函数实现闭包相比,使用对象实现的闭包可以更直观地展现出函数与父级作用域之间的关系,同时也可以更方便地访问到相应的属性。
以一个简单的示例来说明:
使用函数实现闭包:
function createClosure() {
let count = 0;
return function() {
count++;
return count;
}
}
let closure = createClosure();
console.log(closure()); // 1
console.log(closure()); // 2
使用对象实现闭包:
let obj = {
count: 0,
increase: function() {
this.count++;
return this.count;
}
}
console.log(obj.increase()); // 1
console.log(obj.increase()); // 2
从上面的示例中可以看到,使用函数和对象都能实现闭包的效果,但是对象实现的闭包更直观和便捷。