我们在理解了闭包是什么以后,了解它们是如何工作的,那么接下来,让我们来看看如何在页面中使用闭包。让我们一起来学习一下吧。
使用闭包私有变量闭包的一种常见用法是封装一些信息作为“私有变量”——也就是说,限制这些变量的作用域。在编写面向对象的JavaScript代码时,是无法使用传统的私有变量的:对象的属性对外保持隐藏。但通过使用闭包,我们可以实现一个可接受的类似功能,示例代码如下。代码清单5.4 使用闭包模拟私有变量
在代码清单5.4中,我们创建一个函数作为构造器。现在,我们需要知道用法,在函数上使用new关键字时,就会创建一个新对象实例,该函数会被调用,并将新对象作为它的上下文,函数会作为该对象的构造器。所以函数内的this就是新实例化的对象。在构造器内,我们定义了一个变量feints用于保存状态。JavaScript的作用域规则显示了它的可访问性只能在构造器内部。
接下来,创建实现方法feint(),以便在一个受控制的方法内控制变量的值。在真实的应用程序中,该方法可能是一些业务逻辑方法,但在本例中,它只是增加feints的值。建立了构造器之后,使用new操作符进行调用,然后再调用feint()方法。测试代码显示,可以通过存取方法获取私有变量的值,但是不能直接访问私有变量。这有效地阻止了我们不能控制的变量修改,就像它是完全面向对象语言中的一个私有变量一样。
在构造器内隐藏变量,使其在外部作用域不可访问,但是可以存在于闭包内。上述代码允许ninja的状态可以通过一个方法来维护,而无需通过用户方法进行直接访问,因为该变量可以通过闭包存在于内部方法,而不是存在于构造器外部的代码。
领取专属 10元无门槛券
私享最新 技术干货