zoukankan      html  css  js  c++  java
  • js中的闭包

    前言:市面上对闭包的理解:(不同的人对闭包的理解不尽相同)
    1.一个函数就是一个闭包
    2.闭包就是让内部函数可以访问外部函数的参数或者变量,这个值是不会被浏览器垃圾回收机制回收

    js中的闭包理解:
    js有个特性,函数开了一个新空间,里面的变量、私有属性都不会被外界干扰.(封闭空间)
    (function(){ })()
    闭包:
      函数套函数,子函数使用父函数的参数或者变量,并且子函数被外界所引用(没释放)
      这个时候,父函数的参数或者变量不会被垃圾回收机制回收,此时在浏览器(chrome)
      中打印父级的返回值,在scopes下多了一个closure,closure就叫闭包。
    1     function fn(a) {
    2         return function f(){//函数套函数
    3             a++//子函数使用父函数的变量或者参数
    4         }
    5     }
    6     abc = fn(1);
    7     console.dir(abc);//scopes下多了一个closure,closure就叫闭包。

    为什么要用闭包?
    就是为了函数体内的参数或者变量不会被垃圾回收机制回收(保留下来)

    函数体内的参数或者变量什么时候被销毁?
    函数执行:(五步)
    1.开了一个空间(新的作用域)
    2.参数赋值
    3.预解析(变量提升)
    4.从上到下执行上下文
    5.局部作用域销毁
    当直接调用完函数,函数就自动被回收了(包括函数内的参数、变量)

    闭包的作用(应用场景):
      1.私有变量不被外界所干扰(互相不冲突)
    在多人开发的时候,在全局作用域下难免会遇到名字重复的情况。(全局污染)
      2.存储父函数的参数或者变量 (不被浏览器的垃圾回收机制回收)
    解决:
      可以使用封闭空间
      (function(){})()
      可以使用命名空间
      把变量变成属性、把函数变成方法
    1 var xxx = {//xxx是我独有的且不和别人重复的名字。
    2               fn:function (){
    3                   // alert(1);
    4                   console.log(this);//我的对象
    5               },
    6               a:10
    7           };
    8           xxx.fn(); //执行方法
    
    
    封闭空间缺点:
    外面想用函数内的运算结果,是不能直接访问到的。

    解决:
    return 出去,外面接受一个返回值
    或挂window下

    1   var obj = (function(){
    2         window.a = 1
    3         ...
    4         return {
    5         a,b,c
    6      }
    7      })();
    扩充知识点:
    变量、属性 的区别:
    变量前面没主(默认主为window)
    属性前面有主(主就是.前面的对象)

    函数、方法 的区别:
    函数前面没主(默认主为window)
    方法前面有主(主就是.前面的对象)
    1 let a = {}  //a变量
    2 window.name= " "  //属性
    3 
    4 function fn(){...} //函数
    5 string.substring();//方法
    6 arr.push() //点儿 . 前面的就是主
  • 相关阅读:
    Mockito测试
    linux笔记:shell编程-正则表达式
    linux笔记:shell基础-环境变量配置文件
    linux笔记:shell基础-bash变量
    linux笔记:shell基础-bash基本功能
    linux笔记:shell基础-概述和脚本执行方式
    linux笔记:文件系统管理-fdisk分区
    linux笔记:文件系统管理-分区、文件系统以及文件系统常用命令
    linux笔记:权限管理-sudo
    linux笔记:用户和用户组管理-用户管理命令
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/9865365.html
Copyright © 2011-2022 走看看