<script> function Deng(name, wife){ var prepareWife = "xiaozhang"; this.name = name; this.wife = wife; this.divorce = function(){ this.wife = prepareWife; } this.changePrepareWife = function(target){ prepareWife = target; } this.sayPrepareWife = function(){ console.log(prepareWife); } } var deng = new Deng('deng', 'xiaoliu') </script>
外部执行的divorce可以用内部变量,因为this.divorce在对象上,由于对象返回了,这个方法也被返回了,因为闭包,这个函数被存储到了外部,所以储存了这个函数的执行期上下文,var prepareWife被三个函数公用,这三个函数共同用Deng的AO,所以可以在外部随意存取。
deng.prepareWife是undefined,表面上看起来不是自己的,但是实际上只有对象自己通过对象自己设置的方法可以去操作他。外部用户通过对象.prepareWife是看不到的,只有自己能看到,这就是闭包的私有化运用。