闭包

朴灿烈づ我的快乐病毒、 2022-04-03 15:54 345阅读 0赞

JS闭包

闭包是函数和声明该函数的词法环境的组合

  • 从本质上讲,闭包是外部函数和内部函数链接的桥梁;也就是在一个作用域中可以访问另一个作用域的变量,外部函数作用域可以被内部函数所访问
  • 闭包特点:延展了函数的作用域范围

闭包的认识

  1. 未闭包

    function fn(){

    1. var n = 10
    2. return n
    3. }

    console.log(fn()) //10

  2. 闭包

    function fn1() {

    1. var n = 10;
    2. return function () {
    3. return n;
    4. }

    }
    var f1 = fn1() // f1 为function () {return n;}
    console.log(f1()) // 10

  3. 延展了函数的作用域范围

闭包的演示

使用闭包产生一段区间的随机数

  1. function ranNum(min,max){
  2. return function(){
  3. return parseInt(Math.random()*(max-min+1))+min
  4. }
  5. }
  6. var f1 = ranNum(5,8)
  7. // 产生[5,8]的随机整数
  8. console.log(f1())

用闭包模拟私有方法

私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。

使用闭包来定义公共函数,并令其可以访问私有函数和变量。这个方式也称为 模块模式

  1. var counter = (function(){
  2. var privateStr = '我是模拟私有方法'
  3. return {
  4. ranNum:function(){
  5. return parseInt(Math.random()*10+1)
  6. },
  7. str:function(val){
  8. return privateStr+=val
  9. }
  10. }
  11. }())
  12. console.log(counter.ranNum()) //产生1到10的随机数
  13. console.log(counter.str('--我添加的字符串')) //我是模拟私有方法--我添加的字符串

以这种方式使用闭包,提供了许多与面向对象编程相关的好处 —— 特别是数据隐藏和封装。

缺点

闭包在处理速度和内存消耗方面对脚本性能具有负面影响

发表评论

表情:
评论列表 (有 0 条评论,345人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    函数嵌套函数 内部函数使用外部函数的变量 外部函数被调用 优点: 延长局部变量的声明周期 缺点: [内存泄漏][Link 1] [Link 1]: ht

    相关

    先来看一个题目例子,我将在下一环节出闭包讲解。。 题目描述 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与

    相关

    写在前面 > 其实闭包这个词在很多的地方都听到过,以前看到说这是前端javascript这门语言的所具有的特点。当时不知所以然也没接触到对应的概念,现在遇到一个问题就是,

    相关

    JS闭包 > 闭包是函数和声明该函数的词法环境的组合 从本质上讲,闭包是外部函数和内部函数链接的桥梁;也就是在一个作用域中可以访问另一个作用域的变量,外部函数作用

    相关

    1.闭包 2.原型链 3.深/浅拷贝 4.this指向 5.柯里式 6.ES6 7.webpack 配置 打包 8.虚拟dom 9.js 堆栈

    相关

    闭包 1. 函数引用 def test1():     print("--- in test1 func----") \调用函数 test1() \引用函数

    相关

    在函数内定义个函数,并将函数作为结果返回。返回的函数可以调用外部函数的参数,如果该函数被执行,将返回已经结算出的值 <!DOCTYPE html> <html

    相关

    闭包: 就是能够读取其他函数内部变量的函数或者说闭包就有权访问另一个函数作用域中的变量的函数。 作用: 1.可以读取函数的变量 2.让这些变量的值始终保存在内存中 3