闭包

时间:2021-2-20 作者:admin

什么是闭包

声明在函数内部,可以访问函数的局部变量的函数

//方法一
function fn(){
    let num=10
    function test(){
        console.log('hello world')
    }
    return test
}
let sp=fn()
sp()
//方法二
let p2=(function(){
    let num=100
    function(){
        console.log(num)
    }
}())
p2()

闭包的作用

提升变量生命周期

变量的生命周期:从变量的声明到变量的回收。
局部变量是:从声明这个变量到这个函数执行结束
全局变量:js代码从开始执行到执行结束
提升变量生命周期 本来要要回收,结果没回收

function fn(){
    let num=10
    function add(){
        console.log(num)
    }
    function rem(str){
        let str1=str>0?str:0
    }
    return{
        getNum:add,
        setNum:rem
    }
}
let p1=fn()//返回一个对象,这个对象里有两个方法
p1.getNum()

声明私有属性

//闭包可以声明私有属性
//以前写构造函数
function Student(name,age){
    this.name=name
    this.age=age
}
//实例化学生对象:name和age等属性  可以直接对象访问
let s1=new Student('jack',20)
console.log(s1.name)
console.log(s1.age)

//声明私有属性的构造函数
function Student(name){
    let age=20
    this.name=name
    //对age做操作的方法
    this.setAge=function(value){
        if(value>=0&&value<=100){
            age=value
    }
    this.getAge=function(){
        return '我的年龄不方便透露....'
    }
}
//实例化一个学生对象:学生对象不能访问age,必须要通过setAge()和getAge()方法
let s2=new Student('luck')
console.log(s2.name) //luck
console.log(s2.setAge())//20

闭包的使用注意

//如果你希望函数内部的局部变量每一次使用都是同一个,那外部的函数只能调用一次
function outer(){
    let num=Math.floor(Math.random()*100)
    function inner(){
        console.log(num)
    }
    return inner
}
let fn=outer()
fn()
fn()

outer()()
outer()()
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。