JavaScript进阶之浅谈闭包

什么是闭包

官方解释:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函 数),因而这些变量也是该表达式的一部分
简单来说闭包就是在一个函数内声明另一个函数(不太严谨的说法)

产生闭包的条件

  • 闭包一定是函数对象
  • 函数内保持对上层作用域的访问
  • 当函数在其定义的作用域外进行访问时才产生闭包

闭包例子

function fn(){	//函数fn
    var n = 2;
    return function fc() { //内部函数fc
        console.log(n) //访问上层作用域的n
    }
}
fn()()

闭包的优缺点

优点

  • 避免变量命名的污染
  • 可以让属性和方法私有化
  • 能读取外部变量而外部不能读取闭包内部变量
  • 变量不会被垃圾回收

缺点

  • 比较浪费内存IE浏览器下容易内存泄漏

使用闭包写模块

//简易demo
(function () {
    var name = "Annie";
    var age = 18;
    var sex = '女';
    function bath() {
        console.log(name+"在洗澡");
    };
    function run() {
        console.log(age+"岁的"+name+"在跑步");
    };
    window.model = {
        name:name,
        sex:sex,
        run:run
    };
})();
console.log(model);         // {name: "Annie", sex: "女", run: ƒ}
console.log(model.name);    // Annie
console.log(model.age);     // undefined
console.log(model.sex);     // 女
model.run();                 // 18岁的Annie在跑步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值