闭包的使用实例

场景一:采用函数引用方式的setTimeout调用

闭包的一个通常的用法是为一个在某一函数执行前先执行的函数提供参数。例如,在web环境中,一个函数作为setTimeout函数调用的第一个参数,是一种很常见的应用。

setTimeout将要执行的函数(或者一段javascript代码,但这不是我们要讨论的情况)作为它的第一个参数,下一个参数是需要延迟执行的时间。如果一段代码想通过setTimeout来调用,那么它需要传递一个函数对象的引用来作为第一个参数。延迟的毫秒数作为第二个参数,但这个函数对象的引用无法为将要被延迟执行的对象提供参数。

但是,可以调用另一个函数来返回一个内部函数的调用,将那个内部函数对象的引用传递给setTimeout函数。内部函数执行时需要的参数,在调用外部函数时传递给它。setTimeout在执行内部函数时无需传递参数,因为内部函数仍然能够访问外部函数调用时提供的参数:

function callLater(paramA, paramB, paramC) {
            /*使用函数表达式创建并放回一个匿名内部函数的引用*/
            return (function () {
                /*
                这个内部函数将被setTimeout函数执行;
                并且当它被执行时,
                它能够访问并操作外部函数传递过来的参数
                */
                paramA[paramB] = paramC;
            });
        }  

        /*
        调用这个函数将在它的执行上下文中创建,并最终返回内部函数对象的引用
        传递过来的参数,内部函数在最终被执行时,将使用外部函数的参数
        返回的引用被赋予了一个变量
        */
        var funcRef = callLater(elStyle, "display", "none");
        /*调用setTimeout函数,传递内部函数的引用作为第一个参数*/
        hideMenu = setTimeout(funcRef, 500);  

原网址链接:http://blog.csdn.net/yanghua_kobe/article/details/6780181

时间: 2024-07-31 23:51:40

闭包的使用实例的相关文章

窥探Swift之函数与闭包的应用实例

今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实例中回类比一下Objective-C中的函数的写法等等.Swift中的函数还是有许多好用的特性的,比如输入参数,使用元组返回多个值, 定义形参名,设定默认参数以及可变参数等等一些好用的特性.而在Swift中的闭包就是Objective-C中的Block, 除了语法不通外,两者的用法是一样的.废话少说

窥探 Swift 之 函数与闭包的应用实例

今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实例 中回类比一下Objective-C中的函数的写法等等.Swift中的函数还是有许多好用的特性的,比如输入参数,使用元组返回多个值, 定义形参名,设定默认参数以及可变参数等等一些好用的特性.而在Swift中的闭包就是Objective-C中的Block, 除了语法不通外,两者的用法是一样的.废话

闭包的简单实例和解释

var fff=(function(){ var a=1; function fn1(){ a++; console.log(a); }; function fn2(){ return a+10; }; return {f1:fn1, f2:fn2};})() var ss=fff.f1; var cc=console.log(fff.f2());//11 ss();//2 var fnbg=function(num){ var number=num; return function bg(nu

闭包->类的实例数组排序

<script>function Person(name,age){ if(this instanceof Person)//如果是 new { this.name=name; this.age=age; } else return new Person(name,age); //如果是当函数调用,则直接new自己 }Person.prototype.toString=function(){return "name:"+this.name+"\tage:"

Swift的闭包(二):捕获值

闭包可以从定义它的上下文中捕获常量和变量. 在Swift中,捕获值最简单的例子是嵌套函数,举个例子: 1 func makeIncrementer(forIncrement amount: Int) -> () -> Int { 2 var runningTotal = 0 3 func incrementer() -> Int { 4 runningTotal += amount 5 return runningTotal 6 } 7 return incrementer 8 } 在这

JavaScript 闭包究竟是什么

JavaScript 闭包究竟是什么 1.简单的例子 首先从一个经典错误谈起,页面上有若干个div, 我们想给它们绑定一个onclick方法,于是有了下面的代码 <div id="divTest"> <span>0</span> <span>1</span> <span>2</span> <span>3</span> </div> <div id="d

进击的雨燕-------------闭包

闭包是自包含的函数代码块,可以在代码中被传递和使用.Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用.这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift 会为您管理在捕获过程中涉及到的所有内存操作. 注意如果您不熟悉捕获(capturing)这个概念也不用担心,您可以在值捕获章节对其进行详细了解. 在函数章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

[Swift]Day15:闭包中的循环强引用

闭包中的循环强引用 解决闭包和类实例之间的循环强引用可以通过定义捕获列表来实现. 捕获列表 捕获列表中的每个元素都是由weak或者unowned关键字和实例的引用(如self)成对组成.每一对都在方括号中,通过逗号分开: lazy var someClosure: (Int, String) -> String = { [unowned self] (index: Int, stringToProcess: String) -> String in } 我们需要判断捕获列表中的属性是弱引用还是