搜索
写经验 领红包

js闭包的理解详解(js闭包作用问题解决应用)

导语:js-闭包引发的血案

js闭包的理解详解(js闭包作用问题解决应用)

不说废话,看题图闭包

一、闭包:能够读取其他函数内部变量的函数

二、保护私有变量,防止变量被污染;延长变量的作用范围

三、注意闭包内部的this指向,最后是window调用

四、例子

window.name = &34;window.age = 16window.number = 2;window.Person = {    name:&34;,    eatting:function(){        let name = &34;        let age = 15        let number = 1        return function(){          return age++ +&34;+ name + &34; + this.number + &34;;      }    }}  var myPerson = Person.eatting();console.log(myPerson());console.log(myPerson());

结果为:

15岁red吃了2碗饭

16岁red吃了2碗饭

解析:

1、在eatting 闭包中,返回函数中 name 会根据作用域往上获取,在eating找到“red”

2、在闭包里,this的指向依旧根据谁调用指向谁,在调用Person.eatting生成闭包myperson,返回的函数,下次调用一定是 window.myPerson()

3、在eatting 闭包中,返回函数中 age 会根据作用域往上获取,在eating找到 15,初始化之后将会存在内存中,下次执行再次 myPerson() ,使得 age++

结果:

保护私有变量,防止变量被污染;延长变量的作用范围,this指向window

注意:

1、案例中用var 定义将会在顶层定义;

2、let、const存在块级作用域,不会将变量定义在顶层

本文内容由小彤整理编辑!