这个问题更多的是关于理论规划而不是实践。
我一直在阅读javascript中的闭包。简而言之,它们是一个只有函数可访问的变量集合的函数,而不是可以由函数组成的副本。每个函数都有自己的 var a 。
但是,我认为它与同一个类的实例完全相同,每个类都有自己的成员/属性。实例的方法只能访问该实例中的 var a 。
闭包是否能完成OOP无法做到的事情?或者,至少,当使用闭包时,具有更清晰的代码或其他优势的东西?
很抱歉这样说,但我看到有人在讨论闭包,好像它是javascript所提供的最好的东西之一...但我认为它只是创建一个范围不会消失的函数的副作用。我错了吗?
修改
由于有些人认为这个问题只有基于意见的答案,我会重新提出问题,以便讨论变得具体:
只有OOP javascript提供的内容无法完成?
答案 0 :(得分:1)
经过大量研究后,我发现(或者我过去无法弄清楚这一点,即使我已经读过它)也是封闭的优势。
当在javascript中使用OOP时,无法创建私有变量(作为一个孤独的狼程序员,从不需要它们)。始终可以访问对象的成员,即始终在范围内。
但是闭包只允许变量访问它们定义的范围内的代码。任何在范围外使用变量名称的尝试都将到达该范围内具有相同名称的其他变量(如果已定义)。并且没有办法进入这些变量的范围来获取/设置它们,除非表示范围将get / set方法提供到外部范围。这些方法可以访问变量,可以从“外部世界”调用。一种创建私有变量的方法getter / setter方法!
另一个优点是,当在闭包的范围内时,永远不要混淆具有相同名称的外部变量。
这就是所谓的“封装”,可以使用闭包而不是普通的javascript OOP来实现。
答案 1 :(得分:0)
当我需要多个实例的东西时,我使用类或可实例化的对象,并且通常在只有一个实例的情况下使用闭包,只是为了保持大量内部变量的私有。
闭包不仅仅是一个类的替代,但是从外部作用域“关闭”变量是js中经常使用的东西。