javsscript闭包的一种使用场景--沙箱

​
//沙箱:模块化,沙箱是一个隔离的环境,最大的好处就是避免全局变量的污染.
var model = (function () {//一个匿名的立即执行函数
    var price = 900;//这是一个model局部的变量,外界无法访问,无法修改
    //有效的保障了属性的安全性
    return {
        pay: function (money) {
            if (money < price) {
                console.log("您的消费不够,请继继续消费");
            } else {
                console.log("恭喜成为VIP");
            }
        }
    }
})();
console.log(model.pay(800));//"消费不够.."   undefined  
model.pay(1000);//"VIP..."
//千万注意不用打印,pay函数本身就有输出,如果在console.log中
//会输出函数的返回值.

//在面向对象中使用沙箱
//应用场景:在页面初始化的时候要用到f1,f2,f3三个函数
//这三个函数不想让外界访问,需要把这单个方法声明成为构造函数
//内部私有的变量
var songManger = (function(){
    function f1(){
        console.log("函数f1的方法");
    }
    function f2(){
        console.log("函数f2的方法");
    }
    function f3(){
        console.log("函数f4的方法");
    }
    function SongManger(){//声明一个构造函数
    }
    SongManger.prototype={//在原型对象上扩展方法
        init:function(){
            f1();
            f2();
            f3();
        }
    };
   // return SongManger;//注意这个返回的是构造函数,使用之前需要先实例化一下
    return new SongManger;//把构造函数返回,实例化一下,这样外边就不需要实例化了
})();
songManger.init();//
​

  

原文地址:https://www.cnblogs.com/itlyh/p/6045765.html