js-闭包

简介: 闭包就是函数嵌套函数,目的是为了访问一个函数中的局部变量,让这个局部变量可以全局访问,即使这个变量所在的函数被释放之后,依然可以访问。

闭包的概念及应用

  1. 什么是闭包?

简单来说,闭包就是函数嵌套函数,目的是为了访问一个函数中的局部变量,让这个局部变量可以全局访问,即使这个变量所在的函数被释放之后,依然可以访问。

  1. 为什么不使用全局变量?

造成全局污染

  1. 闭包原理?

是利用了浏览器的垃圾回收机制,当被销毁的内容被垃圾回收机制清除的时候,发现这个内容正在被另一个函数所使用,则这个内容将永远不被回收,长驻内存,所以会造成内存泄露。

  1. 闭包的优缺点?

优点:可以让一个局部变量在全局访问

缺点:由于闭包的变量是始终保存在内存中,内存消耗会变大,导致网页性能问题。在IE浏览器中可能还会导致内存泄漏等问题;故在退出函数之前,将所有变量删除。

  1. 如何解决内存泄露的问题?

将使用完毕的变量赋值为null

闭包的应用

  1. 模拟私有变量

    const User = (function(){
         
        //定义私有变量_password
        let _password = null;
        class User{
         
            constructor(username,password){
         
                //初始化私有变量_password
                _password = password
                this.username = username;
            }
            login(){
         
                console.log(this.username,_password);
            }
        }
        return User;
    })();
    let user = new User('小明',123);
    console.log(user.username); //小明
    console.log(user.password); //undefined
    console.log(user._password); //undefined
    user.login(); //小明 123
    
    <script>
         let Person = (function(){
         
             //创建一个私有属性
             let user = null;
             class Person{
         
                 constructor(name,age,gender){
         
                     user = name;
                     this.age = age; //公有属性
                     //私有属性
                     let sex = gender;
                 }
                 showName(){
         
                     return user;
                 }
                 showAge(){
         
                     return this.age;
                 }
             }
             return Person;
         })();
    
         //创建ps对象
         let ps = new Person('张三',18);
         console.log(ps.user); //undefined
         console.log(ps.age); //18
         console.log(ps.showName(),ps.showAge()); //'张三' 18
         console.log(ps.sex); //undefined
     </script>
    
相关文章
|
22天前
|
自然语言处理 JavaScript 前端开发
JavaScript中闭包:概念、用途与潜在问题
【4月更文挑战第22天】JavaScript中的闭包是函数及其相关词法环境的组合,允许访问外部作用域,常用于数据封装、回调函数和装饰器。然而,不恰当使用可能导致内存泄漏和性能下降。为避免问题,需及时解除引用,减少不必要的闭包,以及优化闭包使用。理解并慎用闭包是关键。
|
22天前
|
JavaScript
闭包(js的问题)
闭包(js的问题)
13 0
|
22天前
|
JavaScript 前端开发
解释JavaScript闭包的工作原理,并举例说明其在游戏开发中的应用。
JavaScript闭包允许内部函数访问并保持对外部函数变量的引用,即使外部函数执行结束。当函数返回内部函数时,形成闭包,继承父函数作用域链。在游戏开发中,闭包用于创建具有独立状态和行为的角色实例。例如,`createCharacter`函数创建角色并返回包含属性和方法的对象,内部函数如`getHealth`、`setHealth`和`attack`通过闭包访问并操作角色的变量。这种方式确保了每个角色的状态在不同实例间独立,是实现游戏逻辑的强大工具。
17 2
|
22天前
|
存储 缓存 JavaScript
|
21天前
|
JavaScript 前端开发
JavaScript 闭包:让你更深入了解函数和作用域
JavaScript 闭包:让你更深入了解函数和作用域
|
21天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包基础
JavaScript闭包基础
|
22天前
|
缓存 自然语言处理 JavaScript
JavaScript内存泄漏导致应用性能下降,常见于闭包使用不当
【5月更文挑战第14天】JavaScript内存泄漏导致应用性能下降,常见于闭包使用不当。闭包能记住并访问词法作用域,若函数返回后,其引用的对象未被释放,就会引发泄漏。例如,`createLeakyFunction`创建的闭包保留了对大型对象`someLargeObject`的引用,即使函数执行完毕,对象也无法被垃圾回收。避免泄漏的方法包括及时解除引用、清除事件监听器、使用WeakMap和WeakSet以及定期清理缓存。使用性能分析工具可检测和修复内存泄漏问题。
23 3
|
22天前
|
JavaScript 前端开发
JavaScript闭包允许内部函数访问并保留外部函数的变量,即使外部函数执行结束
【5月更文挑战第13天】JavaScript闭包允许内部函数访问并保留外部函数的变量,即使外部函数执行结束。在游戏开发中,闭包常用于创建独立状态的角色实例。例如,`createCharacter`函数生成角色,内部函数(如`getHealth`、`setHealth`)形成闭包,保存角色的属性(如生命值)。这样,每个角色实例都有自己的变量副本,不互相影响,从而实现角色系统的独立性。
23 0
|
22天前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包机制
闭包是JavaScript中一个重要且常被误解的概念。本文将深入探讨闭包的本质、工作原理以及在实际开发中的应用。通过详细解析闭包的定义、作用域链、内存管理等方面,读者将对闭包有更清晰的理解,并能够运用闭包解决实际开发中的问题。
|
22天前
|
前端开发 JavaScript
闭包在JavaScript中有许多应用场景
【5月更文挑战第7天】闭包在JavaScript中发挥关键作用,如封装私有变量和函数提升安全性,维护变量生命周期,实现高阶函数,模拟块级作用域,支持回调函数以处理异步操作,以及促进模块化编程,增强代码组织和管理。闭包是理解和掌握JavaScript高级特性的重要一环。
30 7