zoukankan      html  css  js  c++  java
  • 关于js闭包官方解释庖丁解牛式理解

    闭包:是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

    变量+环境

    首先按这个句子主谓宾来分解。闭包是一个表达式,通常是一个函数。

    这意味着第一它是表达式,不是语句,语句是以";"作为结束的,或者某些情况省略分号也可以。

    如下:function foo(){
       return function(){console.log(arguments);}
    }

    函数foo在执行后返回一个闭包,这个闭包是一个函数,并且这个函数在foo外可以访问foo函数输入的参数。

    所以定义中所说的拥有许多变量,这个变量指的是只能在foo内部访问的foo的私有变量,即父级直至根函数的所有私有变量。

    绑定了这些变量的环境指的是返回的这个闭包构成的上下文环境对父级直至根函数的所有私有变量实施了绑定,也即在闭包返回到闭包所在的作用域之外后仍可以访问他所在作用域的私有变量。闭包是拥有一个环境的,因此在函数中return 变量X,并不构成闭包。一个变量不足以成为一个环境。

    简言之:简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

    以上正是闭包的意义所在。

    疑问:闭包通常是函数表达式,言下之意是还有什么情况产生闭包?没找到。求解!

    刚看到一个,突然茅塞顿开,如下:

    1. function Person(){    
    2.     var name = "default";       
    3.        
    4.     return {    
    5.        getName : function(){    
    6.            return name;    
    7.        },    
    8.        setName : function(newName){    
    9.            name = newName;    
    10.        }    
    11.     }    
    12. };    
    13.      

    也即返回的闭包也可以是一组函数构成的对象。

  • 相关阅读:
    42 最大子数组Ⅱ
    笔试之const问题
    笔试中sizeof求字节数的问题
    40 用栈实现队列
    38 搜索二维矩阵Ⅱ
    25.Remove Nth Node From End of List(删除链表的倒数第n个节点)
    29.最小的K个数
    28.数组中出现次数超过一半的数字
    27.字符串的排列
    26.二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/jiangtian/p/6404993.html
Copyright © 2011-2022 走看看