闭包与立即执行函数

闭包与立即执行函数

一、闭包

(一)概念

闭包:有权访问另一个函数作用域中变量的函数。抽象地来说,内部函数被保存到外部时,就会生产闭包

内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)

function outer() {
    var a = "来自外部函数的数据";
    return function inner() {
        console.log(a)
    }
}
var rs = outer()
rs()

闭包的特点

  1. 可以让外部访问函数内部变量
  2. 局部变量会常驻在内存中
  3. 可以避免使用全局变量,防止全局变量污染;
  4. 造成内存泄漏(局部变量内存空间被长期占用,而不被释放)

(二)闭包的作用

  1. 将操作的变量或对象隐藏起来,只允许特定的方法才能访问

    定义一个计数器:

    • 使用全局变量i——全局变量名污染问题,全局变量可以修改
    • 使用局部变量 i——只在函数内部有效,函数调用完销毁,而且全局无法访问
    • 使用闭包变量 i——全局可以访问,不会被随意修改
   function count(){
       var i=0;
       return function () {
           return ++i;
       }
   } 
   c1 = count();
   console.log(c1());  //print1
   console.log(c1());  //print2
   c2 = count();
   console.log(c2());  //print1
  1. 已运行结束的函数上下文中的变量对象继续留在内存中

    • 因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收

二、立即执行函数

参考文章

https://www.cnblogs.com/sharpest/p/11439763.html

https://blog.csdn.net/weixin_43586120/article/details/89456183

http://cavszhouyou.top/JavaScript%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E4%B9%8B%E9%97%AD%E5%8C%85.html

原文地址:https://www.cnblogs.com/zengbin13/p/12969560.html