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.      

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

  • 相关阅读:
    Gradle 配置国内镜像
    Spring_Boot 简单例子
    IDEA中代码不小心删除,或者改了半天想回退到某个特定时间怎么办?
    Java 装饰模式
    Spring中 aop的 xml配置(简单示例)
    Spring使用@AspectJ开发AOP(零配置文件)
    Redis 的简单运算
    Redis 安装 与 使用
    touch-action属性引起的探索
    select下拉框的探索(<option></option>标签中能嵌套使用其它标签吗)
  • 原文地址:https://www.cnblogs.com/jiangtian/p/6404993.html
Copyright © 2011-2022 走看看