`

闭包的用处

阅读更多
延迟调用

setTimeout 函数允许在指定时间之后在全局对象(window 对象)里执行一个无参数函数。利用闭包的特性,我们就可以给这个函数传递参数。
function dosomething(param) {
    return (function() {
        //这里可以得到 param 这个参数
        alert(param);
    });
}
setTimeout(dosomething('参数'), 1000);


命名空间

闭包包含了函数代码和绑定了自由变量的计算环境,这个环境就可以给函数提供一个私有的命名空间。这个特性可以用在很多情况下。例如一个字符串解析函数需要一个特殊字符列表,如果把这个列表定义在函数体中,那么每次调用这个函数的时候都要重新初始化一次特殊字符列表。有两种方法可以避免这种重复计算,一是把特殊字符列表定义成全局的变量。但这样至少会产生两个问题,污染了全局命名空间,同时这个全局变量在任何地方都可以被修改。第二种方法就是利用闭包,示例代码如下。
var parse = function(){
    var list = ['t', 'n', '\' /* other */];
    return function(str /* 要解析的目标字符串 */) {
        //do parse
    };
}();
 
parse('hello');


这样,不管调用多少次 parse 函数,特殊字符列表都不会重新初始化了,而且外部任何地方都无法访问这个列表。

通过闭包可以做什么,以上只是举两个比较常见的例子,有一篇文章说闭包什么都可以做。有的时候不用闭包可能也可以实现相应的功能,但闭包使 JavaScript 变得更加灵活,可以让你写出更加优雅的代码。要详细解答这个问题要通过大量的实践和总结了,我们只要对它的原理理解了,平时开发的时候多思考,就知道该不该用闭包了。

-EOF-
分享到:
评论

相关推荐

    js闭包的用途详解

    我们来看看闭包的用途。事实上,通过使用闭包,我们可以做很多事情。比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率。 1 匿名自执行函数 我们知道所有的变量,如果不加上...

    [深入理解JS闭包]帮助你快速学习js的闭包,简单高效的文档资源

    帮助你快速学习js的闭包,简单高效的文档资源! 一、变量的作用域 二、如何从外部读取局部变量? 三、闭包的概念 四、闭包的用途 五、使用闭包的注意点 六、思考题 JavaScript闭包例子

    Python 函数式编程和高阶函数 09闭包的特殊用途.mp4

    Python 函数式编程和高阶函数 09闭包的特殊用途.mp4

    Python中的闭包详细介绍和实例

    一、闭包 来自wiki: 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了...闭包的用途: 因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。 多个函数可以使用一个相同的环境,这使得它

    理解javascript函数式编程中的闭包(closure)

    ”这个定义对于大家来说有些晦涩难懂,所以让我们先通过例子和不那么严格的解释来说明什么是闭包,然后再举例说明一些闭包的经典用途。 什么是闭包 通俗地讲, JavaScript 中每个的函数都是一个闭包,但通常意义上...

    JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上看到了一篇讲JavaScript闭包的文章(原文链接),讲得非常好,这下算是彻底明白了JavaScript的闭包到底是个神马东东以及闭包的用途了,在此写出来和...

    JavaScript闭包实例详解

    主要介绍JavaScript闭包知识,包括闭包的基本概念,闭包的用途等相关知识,介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧

    JavaScript自执行闭包的小例子

    代码如下: //无参数的 (function(){ alert(‘hello’); })();...一眼望去就是括号围着,局部变量想跑也不出来到处捣乱,这是其中一个主要用途,当然了,封装一些javascript库也离不开它。

    promises-without-closures:如何在不需要闭包的情况下使用 JS 承诺

    没有闭包的承诺 当需要传递状态时,通常使用闭包。 可悲的是,这会降低性能,这在性能真的很重要时很糟糕。 ... 这是一个非常微不足道的例子,没有实际用途。 有趣的部分是带有原型的与闭包版本 。

    详谈JavaScript 匿名函数及闭包

    函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数:就是没有函数名的函数。 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 代码如下: ...

    JavaScript基础面试题_62题.pdf_前端面试题

    闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中。 五、this对象的理解 this对象总是指向函数的直接调用者(而非间接调用者)。如果有new关键字,this指向new出来的...

    Closures-for-Java:一个用于创建伪闭包的简单库,利用 Java 的匿名类,但提供标准化的接口,该接口也是类型化的

    随着包含闭包和@FunctionalInterface的 JDK 8 的发布,我想说这个库不再推荐用于大多数用途。

    javaScript匿名函数

    本文将对 JavaScript 匿名函数的定义、创建、调用方式、闭包的概念等进行详细的介绍。 一、函数的定义 在 JavaScript 中,函数可以定义的方式有多种。第一种方式是使用 function 关键字,例如: ``` function ...

    Swift面试题.pdf

    请说明属性观察器的用途。 8. 如何在Swift中实现内存管理?请描述在Swift中的内存管理机制。 9. Swift中的泛型(Generics)是什么?它在编程中有何作用? 10. 在Swift中如何实现多线程编程?请说明在Swift中的多线程...

    Behavior:尝试使可视的口吻风格成为“语言”

    我想制作一个可以通过使用闭包来创建书面代码的程序,该闭包将在屏幕上表示为带有输入(参数)和输出(所评估的闭包的结果)的节点。 预期用途是为函数式编程创建一个可视的“游乐场”,以便我更容易理解所编写的...

    征服Python全栈面试:掌握这20个问题,助你脱颖而出!.zip

    用途:这些面试题及答案是专为Python全栈开发领域设计的,目的是帮助应聘者准备技术面试,评估他们在Python编程、Web开发、数据库管理等多个关键技术领域的知识和技能。这些问题覆盖了Python全栈开发的核心概念和...

    《领域特定语言》(Martin Fowler,Domain-Specific Languages)迷你书

    第四部分介绍了表达式生成器、函数序列、嵌套函数、方法级联、对象范围、闭包、嵌套闭包、标注、解析数操作、类符号表、文本润色、字面量扩展的工作原理和使用场景;第五部分介绍了适应性模型、决策表、依赖网络、...

    领域特定语言

    第四部分介绍了表达式生成器、函数序列、嵌套函数、方法级联、对象范围、闭包、嵌套闭包、标注、解析数操作、类符号表、文本润色、字面量扩展的工作原理和使用场景;第五部分介绍了适应性模型、决策表、依赖网络、...

Global site tag (gtag.js) - Google Analytics