`
wfdoublext
  • 浏览: 129839 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

闭包小例

阅读更多

//A是一个普通的函数  
function A(a)  
{   
    return a;  

//B是一个带函数返回值的函数  
function B(b)  
{   
    return function (c)
    {    
        return b+c; 
    }  
}  

var x = A(10);  

var y = B(20);   

var z = B(30);   

alert(x);      //得到10  
alert(y(50));  //得到70  
alert(z(100)); //得到130
[2008/12/16 12:01:20] 李伝涛 说: Code
var a=[-1,-2,-3,5,6,-1];
function f(s,e)
{
    var ret=[];
    for(var i in s)
    {
        ret.push(e(s[i]));
    }
    return ret;
}
var b=f(a,function(n){return n>0?n:0});
alert(b);

//result:
//0,0,0,5,6,0
[2008/12/16 12:01:45] 李伝涛 说: //这是一个计算x+y的函数,但是它和常规函数的不同之处在于 
//它是被Currying的 
function add(x, y) 
{  
    //当x,y都有值得时候,计算并返回x+y的值  
    if(x!=null && y!=null) return x + y;  
    //否则,若x有值y没有值 
    else if(x!=null && y==null) return function(y) 
    {  
        //返回一个等待y参数进行后续计算的闭包  
        return x + y; 
    } 
    //若x没有值y有值 
    else if(x==null && y!=null) return function(x) 
    {  
        //返回一个等待x参数进行后续计算的闭包     
        return x + y; 
    } 

//计算add(3,4)的值,得到3+4的结果7 
var a = add(3, 4); 
//计算add(2)的值,得到一个相当于求2+y的函数 
var b = add(2); 
//继续传入y的值10,得到2+10的结果12 
var c = b(10);
[2008/12/16 12:02:06] 李伝涛 说: function makefunc(x)
{
    return function(){return x;}
}
var a = [makefunc(0),makefunc(1),makefunc(2)];
alert(a[0]());
//result 0
alert(typeof(a[0]));
//result function
alert(a[0]);
//result function(){return x;}

 

var y = "global";
function constructFunction() {
    var y = "local";
    return new Function("return y");  // Does not capture the local scope!
}
// This line displays "global" because the function returned by the
// Function() constructor does not use the local scope. Had a function
// literal been used instead, this line would have displayed "local".
alert(constructFunction()());  // Displays "global"
[2008/12/16 12:02:41] 李伝涛 说: 科里化:
//这是一个计算x+y的函数,但是它和常规函数的不同之处在于 
//它是被Currying的 
function add(x, y) 
{  
    //当x,y都有值得时候,计算并返回x+y的值  
    if(x!=null && y!=null) return x + y;  
    //否则,若x有值y没有值 
    else if(x!=null && y==null) return function(y) 
    {  
        //返回一个等待y参数进行后续计算的闭包  
        return x + y; 
    } 
    //若x没有值y有值 
    else if(x==null && y!=null) return function(x) 
    {  
        //返回一个等待x参数进行后续计算的闭包     
        return x + y; 
    } 

//计算add(3,4)的值,得到3+4的结果7 
var a = add(3, 4); 
//计算add(2)的值,得到一个相当于求2+y的函数 
var b = add(2); 
//继续传入y的值10,得到2+10的结果12 
var c = b(10);

分享到:
评论

相关推荐

    javascript闭包详解

    2. **状态维持**:如上例所示,闭包可以保持函数执行后的状态,这对于需要记住某些信息的应用场景非常有用。 3. **函数工厂**:闭包可以用来创建一系列具有不同行为但相似结构的函数。 #### 三、闭包的微观世界 ...

    Swift语言利用Closure闭包实现反向传值Demo

    在本例中,我们关注的是匿名闭包,因为它更符合在不同视图控制器间传递数据的场景。 闭包有三个关键特性:捕获值、自动强引用循环检测(也称为弱引用和无主引用)以及闭包表达式语法。当闭包捕获并引用了外部环境的...

    闭包和候选码求解.ppt

    闭包和候选码求解 在关系数据库中,闭包和候选码是两个重要的概念。闭包是指在函数依赖关系中,一个属性集合的所有可能的函数依赖关系,而候选码是指一个关系模式中,能够唯一确定其他所有属性的属性集合。本文将...

    数据库属性闭包与应用

    通过本例,我们发现如果L类属性和N类属性组合不能作候选键,则将LR类属性逐个与L类和N类属性结合做进一步的考察。有时要将LR类全部属性与L类、N类属性组合,最坏情况下R中所有属性组合才能作为候选键。

    js闭包理解

    闭包可以用于各种用途,如延迟执行(例1:为函数引用设置延时)、封装相关功能(例2:包装相关的功能)等。例如,你可以使用闭包来实现定时器,确保函数只在特定时间后执行,而不是立即执行。 在JavaScript中,`...

    离散数学编程之用C++编写的求自反闭包程序

    下面,我们以C++为例,探讨如何编写求自反闭包的代码。首先,我们需要定义一个二维数组来存储关系,然后通过循环更新对角线元素。代码可能会如下所示: ```cpp #include using namespace std; int main() { int ...

    javascript闭包高级教程

    ### JavaScript闭包高级教程 #### 简介 在JavaScript编程中,“闭包”是一个非常重要的概念,尤其对于希望深入理解和高效使用JavaScript的开发者来说。简单地说,闭包是一种能够记住并访问其创建时周围环境的函数...

    什么是js闭包

    1. **读取函数内部的变量**:如上例所示,闭包可以让函数内部的局部变量对外部可见。 ```javascript function f1() { var n = 999; function f2() { alert(n); } return f2; } var result = f1(); ...

    python中的闭包用法实例详解

    例3则展示了装饰器,它是闭包的一种常见应用。装饰器允许我们修改或增强函数的功能,而不改变其原始代码。`makebold`和`makeitalic`是两个装饰器函数,它们接收一个函数作为参数,然后返回一个新的包装函数。使用`@`...

    离散数学关系的闭包PPT学习教案.pptx

    在本例中,t(R)会包含(,c>)。 闭包运算的唯一性意味着对于给定的关系R,r(R),s(R)和t(R)都是确定的,它们分别是包含R的最小自反、对称和传递关系。如果R已经具备相应的性质,闭包运算就返回R本身。如果R不具备这些...

    关于JS中的闭包浅谈.docx

    1. 可以读取函数内部的变量:如上例所示,`C`可以访问到`A`内部的`S`变量,即使`A`函数已经执行完毕。 2. 让这些变量始终保持在内存中:由于`B`函数的存在,`A`函数的作用域并未被垃圾回收,`S`变量得以保留在内存中...

    【JavaScript源代码】js闭包和垃圾回收机制示例详解.docx

    1. **函数作为返回值**:如上例所示,内部函数作为外部函数的返回值。 2. **函数作为参数传递**:将一个函数作为参数传递给另一个函数,并在后者中调用它。 3. **模块模式**:利用闭包来实现私有成员,如下面的例子...

    第3小节属性集的闭包[参考].pdf

    2. F+中的43个FD与例3-25相同,包括所有从空集到每个单属性,从每个单属性到其他所有组合,以及从A到BC和从B到C。 3. R的候选键是A和BC,因为A→B,B→C,所以A和BC都能决定所有属性。 4. 相应的FD可能是A→C和B→D...

    浅谈JavaScript的闭包函数

    以创建比较函数为例: ```javascript function createComparisonFunction(propertyName) { return function(object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if ...

    使用闭包对setTimeout进行简单封装避免出错

    在本例中,我们讨论的是如何使用闭包来封装`setTimeout`,以避免常见的拼写错误和逻辑问题。下面我们将深入探讨闭包、`setTimeout`以及它们如何结合以实现更安全、更易于维护的代码。 首先,`setTimeout`是...

    JavaScript 高级篇之闭包、模拟类,继承(五)

    - **例三**:利用闭包实现私有属性,`createProperty`函数创建的`getAge`和`setAge`方法,可以访问和修改闭包内的`value`变量,而外界无法直接访问。 3. **模拟类**: JavaScript不支持传统的类,但可以通过原型...

    【JavaScript源代码】浅谈react useEffect闭包的坑.docx

    ### React中的useEffect与闭包问题详解 #### 一、问题背景 在React开发中,`useEffect`是一个非常强大的Hook,它可以帮助我们处理副作用逻辑,例如数据获取、订阅或者手动更改DOM等。然而,使用不当可能会导致一些...

    JavaScript闭包的简单应用

    闭包定义 在JavaScript中,当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。简单说,闭包就是能够读取其他函数内部变量的函数。 闭包的作用: 1. 可以读取函数内部的变量 2. 让这些变量的值始终保持...

    JavaScript基础篇(6)之函数表达式闭包

    其实js支持函数闭包的主要原因是因为js需要函数能够保存数据。这里的保存数据是只函数在运行结束以后函数内变量的值也会进行保存。至于为什么js需要在函数内可以保存数据,那就是js是一种函数式语言。...例1: s

Global site tag (gtag.js) - Google Analytics