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.      

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

  • 相关阅读:
    git版本库管理介绍,撤销git pull操作
    【laravel5.4】自定义404、503等页面
    【laravel5.4】{{$name}}、{{name}}、@{{$name}} 和 @{{name}} 的区别
    python 了解一点属性的延迟计算
    python 了解一下__dict__
    excel怎么把一个sheet的 全部内容打印到一页纸上
    python 简单了解一下 描述器
    python 调用父类方法, 重写父类构造方法, 不显式调用,会报错
    Python 今天抽空学习了@Property
    python 语法糖是什么意思
  • 原文地址:https://www.cnblogs.com/jiangtian/p/6404993.html
Copyright © 2011-2022 走看看