javascript-闭包

1.什么是闭包?

峰哥:闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成’定义在一个函数内部的函数’。闭包就是将函数内部和函数外部连接起来的一座桥梁。
个人认为:闭包就好像老爸问孩子要钱(外部的函数访问内部的函数里面的方法和变量)..而老爸是无条件的让孩子过上好生活(内部函数能够访问外部函数的变量和方法)父对象的所有变量,对子对象都是可见的,反之则不成立

2.闭包的好处?

乱用闭包而造成内存泄露,只能说是本末倒置了,实际上闭包概念就是为了避免内存泄露而存在的,闭包重点(或者意义)就是理解js的作用域, 理解了作用域方能更主观的避免内存泄露, 读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

3.作用域?

3.1变量的作用域:全局变量和局部变量
3.2全局变量

         var val=999;//这是全局作用域
        function foo(){
            alert(val)//999在作用域下直接访问外部的数据
        }
        function foo0(){
            val=888;//函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!(直接访问外部的val并且修改了成888)
             return val;
        }
        foo();
        console.log(foo0());//888
        console.log(val)//888(全局变量会容易出现被修改因此需要用了ecma6的常量const去声明)

3.3闭包例子

  function f1(){
    var n=999;
    function f2(){
      alert(n); 
    }
    return f2;
  }
  var result=f1();
  result(); // 999

案例2

function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();//定义为全局方法
  result(); // 1000

result实际上就是闭包f2函数
参考网站:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
参考网站:https://www.zhihu.com/question/34510484?sort=created

你可能感兴趣的:(javascript)