闭包的概念和实例

闭包的概念

什么是闭包呢? 闭包(Closure),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

其实js中,每个函数就是一个闭包。函数和自己的内部定义的变量绑定在一块,组合成的实体就是闭包。只不过在特殊的情况下,即使函数执行完成了,由于某些原因导致函数内部的变量仍然被外界所引用,所以垃圾回收并不释放函数相关的所有内容,而且将函数和必要的变量组成一个闭包的实体,不释放,直到没有外界变量再指向当前的函数的内部的变量那么闭包就会释放掉。

闭包的实例

例1:

function Persion() {
    var t = {};
    t.name = "itcast";
    t.age = 19;
    return t;
   }

var p  = new Persion();
   p.age;

function Persion() {
    var ageProp  = 19;
    var nameProp = "flydragon";
    var phone = "110";   //私有变量
    
    function getPhone() {       //定义属性 get 方法
     return phone;
    }

function setPhone( value ){ //定义属性 set 方法
     phone = value || "";
    }

var showFun  = function() {
     console.log( nameProp + "  " + ageProp );
    };

return {
     age  : ageProp,
     name : nameProp,
     show : showFun,
     get_phone : getPhone,
     set_phone : setPhone
    };

}

var p = new Persion();
   p.show();
   console.log( p.get_phone() );

例2:如何让嵌套函数的父函数访问子函数的内部变量?

function father() {

his.get_age = child();
     function child() {
      var child_value = "child";
      return function() {
       return child_value;
      }

}

}

var f = new father();
    //子函数的早已经执行完毕,但是还能访问到子函数内部的变量值。
    f.get_age();

例3:全局变量(或者外部变量)

function father() {
     var get_value ;
     function child() {
      var child_value = 199;
      get_value = function() {
       return child_value;
      }
     }
     return {
      get : get_value;
     }
    }

var f = new father();
    f.get();

例4:

function father() {
     this.f_name   = "fater";
     this.childAge = child();
 function child() {
      var c_age = 19;  //私有变量
      return {
       set_age : function ( value ) {
        c_age = value;
       },

get_age : function () {
        return c_age;
          }

}
      }
    }

var f = new father();
    f.childAge.set_age(188);
    console.log( f.childAge.get_age() );

时间: 2024-08-24 22:11:58

闭包的概念和实例的相关文章

作用域、原型链、闭包等概念理解

1.执行环境及作用域 (1).执行环境: 定义了变量或函数有权访问的其它数据,决定了它们的各自行为.每个执行环境都有一个与之关联的变量对象(variable object, VO),执行环境中定义的所有变量和函数都会保存在这个对象中,解析器在处理数据的时候就会访问这个内部对象. 全局执行环境是最外层的一个执行环境,在web浏览器中全局执行环境是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的.每个函数都有自己的执行环境,当执行流进入一个函数的时候,函数的环境会被

深入理解Lua的闭包:概念和应用

本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理. 闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数.也就是说,在Lua中,函数是闭包一种特殊情况.另外在Lua

由 JavaScript 看闭包的概念

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

JavaScript闭包的概念及用法

1.闭包的概念: 闭包就是能够读取其他函数内部变量的函数. 例如: function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 其中f2函数就是闭包. 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成"定义在一个函数内部的函数". 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁.2.

python函数中闭包的概念说明

函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wrapper(): name = 'alex' def inner(): print(name) inner() print(inner.__closure__) #(<cell at 0x006121D0: str object at 0x00227380>,) wrapper() 结果: ale

闭包的概念

什么是闭包? 闭包并不是什么新奇的概念,它早在高级语言开始发展的年代就产生了.闭包(Closure)是词法闭包(Lexical Closure)的简称.对闭包的具体定义有很多种说法,这些说法大体可以分为两类: 一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量(指除局部变量以外的变量)的函数. 另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体.有这样的的定义:在实现深约束(英文原词是 binding,也有人把它翻译为绑定)时,需要创

sqlserver游标概念与实例全面解说

引言 我们先不讲游标的什么概念,步骤及语法,先来看一个例子:   ?????? 表一 OriginSalary??????????????????????????????????????????????????? 表二 AddSalary 现在有2张表,一张是OriginSalary表--工资表,有三个字段0_ID 员工号(NVARCHAR).O_Name员工姓名(NVARCHAR).O_Salary工资(FLOAT). 另一张表AddSalary表-加薪表.有2个字段,O_ID员工号.A_Sa

javascript闭包的理解和实例

所谓闭包,值得是词法表示包括不必要计算的变量的函数,也就是说,该函数可以使用函数外定义的变量. 顺便提示一下: 词法作用域:变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域. with和eval除外,所以只能说JS的作用域机制非常接近词法作用域(Lexical scope). 下面是一个简单的使用全局变量的闭包实例: 1 var sWord="Hello,Welcome to web前端开发工程师的博客,请多多指教.&

Javascript 中闭包的概念

一直再说闭包闭包,其实自己一直不懂闭包是个什么意思,今天,上百度找了找闭包的相关资料,参考整理了下,希望以后能用得着: 闭包其实是javascript语言中的一个难点,也是该语言的一个特色,据说很多高级应用都需要闭包的支持: 先理解下下面的几个概念: 1.变量的作用域 javascript中声明变量使用var 关键字,稍微了解的同学都知道,加了var关键字声明的变量是局部变量,反之则为局部变量 例如: var text = 'hello';   局部变量 text = 'world'; 全局变量