精华内容
下载资源
问答
  • 闭包优缺点

    2020-10-12 18:34:23
    闭包优缺点一、闭包是什么?二、闭包的特点1.优点2.缺点总结 一、闭包是什么? 闭包是一个可以访问其他函数内部变量的函数 function one() { var a = '123' return function two () { console.log(a); } } ...

    一、闭包是什么?

    闭包是一个可以访问其他函数内部变量的函数

        function one() {
          var a = '123'
          return function two () {
            console.log(a);
          }
        }
        var b = one ()
        b() //123
    

    二、闭包的特点

    1.优点

    • 可以读取函数内部的变量
    • 避免了全局污染

    2.缺点

    • 变量不会被收回,消耗的内存
    • 使用不当会造成内存泄漏等问题

    总结

    • 嵌套函数中,外部函数可以通过闭包访问外部函数;

    • 慎重使用闭包;

    展开全文
  • 什么是闭包闭包优缺点

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。

    1、变量作用域

    要理解闭包,首先要理解javascript的特殊的变量作用域。

    变量的作用域无非就两种:全局变量和局部变量。

    javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。

    注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!

    2、如何从外部读取函数内部的局部变量?

    出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。

    那就是在函数内部,再定义一个函数。

    function f1(){
    
        var n=999;
    
        function f2(){
          alert(n); // 999
        }
    
      }

    在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。

    这就是Javascript语言特有的”链式作用域”结构(chain scope),

    子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

    既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

    3、闭包的概念

    上面代码中的f2函数,就是闭包。

    各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数。

    由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

    所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

    4、闭包的用途

    闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。

    为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

    这段代码中另一个值得注意的地方,就是”nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。

    5、使用闭包的注意点

    (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

    转自:http://www.cnblogs.com/cxying93/p/6103375.html

    展开全文
  • 闭包优缺点闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作用域 要理解闭包,首先要理解javascript的特殊的变量作用域。 变量的作用域无非就两种...

    【转】什么是闭包?闭包的优缺点?

     

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。

    1、变量作用域

    要理解闭包,首先要理解javascript的特殊的变量作用域。

    变量的作用域无非就两种:全局变量和局部变量。

    javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。

    注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!

    2、如何从外部读取函数内部的局部变量?

    出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。

    那就是在函数内部,再定义一个函数。

    function f1(){

        var n=999;

        function f2(){
          alert(n); // 999
        }

      }

    在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。

    这就是Javascript语言特有的"链式作用域"结构(chain scope)

    子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

    既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

    3、闭包的概念

    上面代码中的f2函数,就是闭包。

    各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数。

    由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

    所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

     4、闭包的用途

    闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。

    为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

    这段代码中另一个值得注意的地方,就是"nAdd=function(){n+=1}"这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。

    5、使用闭包的注意点

    (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

     

    参考文献:

      学习Javascript闭包(Closure) - 阮一峰的网络日志

     
     
     

    转载于:https://www.cnblogs.com/liyuspace/p/8694934.html

    展开全文
  • 闭包优缺点

    2021-05-22 12:53:52
    闭包的作用和优缺点 例子 function fun() { var num = 0; return function() { num++ // console.log(num) return num } } var result = fun() var num1 = result() // 1 var num2 = result() // 2 .....

    闭包的作用和优缺点

    例子
        function fun() {
            var num = 0;
            return function() {
                num++
                // console.log(num)
                return num
            }
        }
        var result = fun()
        var num1 = result() // 1
        var num2 = result() // 2
    

     

    作用
    1、可以打通不同作用域之间的连接 然外部作用域可以访问到内部的变量或者方法
    2、 闭包的变量一直处于引用的状态 所以变量不会销毁
    3、 避免使用全局变量导致的全局变量污染
    4、 比局部变量使用起来更灵活
    缺点
    因为闭包不会销毁变量 所以会造成内存泄漏 也就是说当闭包的变量过多时会导致内存占用过大从而导致运行速度变慢
    如何解决闭包造成的内存泄漏
    在闭包使用结束后手动清除或者置空变量或者方法
     

    展开全文
  • 闭包闭包优缺点

    2020-07-22 11:12:10
    闭包,首先我们需要先了解一下什么是闭包闭包简单的来说就是函数里面又有一个函数;一个简单的闭包函数如下图所示 如图,我们在函数的内部定义了一个变量,那么我们要如何修改那个变量a呢?答案是只能在函数里面...
  • 什么是闭包闭包优缺点

    万次阅读 多人点赞 2018-07-31 15:05:48
    在理解闭包以前.最好能先理解一下作用域链的含义,简单来说,作用域链就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量...
  • 闭包优缺点?这已经是前端开发人员老生常谈的了;闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 参考:http://www.cnblogs.com/cxying93/p/6103375.html 1、变量作用...
  • 简述闭包优缺点

    2017-11-21 19:58:00
    简述闭包优缺点 优点 1.全局变量可能会造成命名冲突,使用闭包不用担心这个问题,因为它是私有化,加强了封装性,这样保护变量的安全 2.每个模块都可以调用,当程序越来越复杂之后,会带不可预测的危险 所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,572
精华内容 3,428
关键字:

闭包的优缺点