JavaScript的闭包问题

  1. 什么是闭包?
    • 《JavaScript权威指南》:函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性叫闭包。从技术的角度讲,JavaScript中所有函数都是闭包:他们都是对象,他们都关联到作用域链。
    • 《JavaScript精粹》:内嵌函数可以在任何情况下访问其外围环境中的变量的这种能力。
    • 我的理解:基于《JavaScript精粹》的定义,加以解释。内嵌函数,可以在任何情况下访问其外围环境中的变量,即使在其父级函数执行完毕后,内嵌函数仍然可以访问其父级函数定义的局部变量。
  2. JS作用域?
    • JS作用域包括全局作用域和方法作用域。
    • 全局作用域不用作解释了吧。
    • 方法作用域:简单的理解 {} 花括号里面的。方法作用域保护其内部变量不能被外部访问。
    • 作用域链:用于保证程序的有序执行,在函数对象的创建的时候就已经形成,不是在执行的时候形成。
    • JS链式作用域:子对象会一级一级的向上寻找所有父对象的变量,所有父对象的所有变量对子对象完全可见,反之则不行。
  3. 闭包的作用:
    • 读取函数内部变量。
    • 让这些变量始终保持在内存中。
//*举个栗子*
function par(){
    var a="hello";
    add=function(){
        a+=" world";
        }
    function show(){
        alert(a);
        }
    return show;
    }
var result=par();
result();  //   hello
add();
resule(); // hello world

注意事项:

  • 过多的使用闭包会导致函数中的变量都保存在内存中,内存消耗很大,不能滥用闭包,否则会照成网页性能问题,IE中可能导致内存泄漏。
    • 解决方法:在突出函数之前将不使用的局部变量删除。
  • 闭包会在函数外部改变父函数内部变量的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值