> 历史文化
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存在块级作用域,不会将变量定义在顶层
本文内容由小彤整理编辑!