什么是javascript闭包?

在我们开发中,也经常使用到闭包,但当有人问什么是闭包,就会可能说不上来。那就谈谈一些基本的:

一.理解闭包的概念,

简单说当function里嵌套function时,内部的function可以访问外部function里的变量,而外部的function不能直接访问内部的function的变量,当你return的是内部function时,就是一个闭包。看下面例子说明:

1.嵌套的函数可以访问在其外部声明的变量。

 function fn(x) {
      var z = 1;
      function fnc(y) {
        alert(x + y + (++z)); //alert为7
      }
      fnc(2);
    }
    fn(3)
fnc既可以访问fn的参数x,也能访问到fn的变量z,但这不是闭包。

2.外部声明的变量下获取到局部变量中的变量


function fn(x) {
var z = 1;
return function (y) {
alert(x + y + (++z));//alert为7
}
}
var bar = fn(2); // 现在是一个闭包
bar(3);

其实理解起闭包的概念真的费敬,个人理解就是:闭包就是能够读取其他函数内部变量的函数,是将函数内部和函数外部连接起来的桥梁。

 

二。闭包好处与坏处

 好处:

1.保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突,

2.匿名自执行函数可以减少内存消耗,在匿名自执行函数传入一个闭包函数,匿名自执行函数执行完立即销毁,可以减小内存消耗。

坏处:被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏。


了解闭包更详细,请参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

 

原文地址:https://www.cnblogs.com/lwming/p/11025578.html