分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

js中的闭包

发布时间:2023-09-06 02:20责任编辑:傅花花关键词:js闭包
前言:市面上对闭包的理解:(不同的人对闭包的理解不尽相同)
????1.一个函数就是一个闭包
????2.闭包就是让内部函数可以访问外部函数的参数或者变量,这个值是不会被浏览器垃圾回收机制回收

js中的闭包理解:
???js有个特性,函数开了一个新空间,里面的变量、私有属性都不会被外界干扰.(封闭空间)
???(function(){ })()
闭包:
???函数套函数,子函数使用父函数的参数或者变量,并且子函数被外界所引用(没释放)
这个时候,父函数的参数或者变量不会被垃圾回收机制回收,此时在浏览器(chrome)
中打印父级的返回值,在scopes下多了一个closure,closure就叫闭包。
1 ????function fn(a) {2 ????????return function f(){//函数套函数3 ????????????a++//子函数使用父函数的变量或者参数4 ????????}5 ????}6 ????abc = fn(1);7 ????console.dir(abc);//scopes下多了一个closure,closure就叫闭包。

为什么要用闭包?
???就是为了函数体内的参数或者变量不会被垃圾回收机制回收(保留下来)

函数体内的参数或者变量什么时候被销毁?
???函数执行:(五步)
???????1.开了一个空间(新的作用域)
???????2.参数赋值
???????3.预解析(变量提升)
???????4.从上到下执行上下文
???????5.局部作用域销毁
???当直接调用完函数,函数就自动被回收了(包括函数内的参数、变量)

闭包的作用(应用场景):
????1.私有变量不被外界所干扰(互相不冲突)
??????在多人开发的时候,在全局作用域下难免会遇到名字重复的情况。(全局污染)
????2.存储父函数的参数或者变量
??????比如选项卡...
????解决:
????可以使用封闭空间
????(function(){})()

????可以使用命名空间
????把变量变成属性、把函数变成方法

1 var xxx = {//xxx是我独有的且不和别人重复的名字。2 ??????????????fn:function (){3 ??????????????????// alert(1);4 ??????????????????console.log(this);//我的对象5 ??????????????},6 ??????????????a:107 ??????????};8 ??????????xxx.fn(); //执行方法
封闭空间缺点:
????外面想用函数内的运算结果,是不能直接访问到的。

????解决:
????return 出去,外面接受一个返回值
????或挂window下

1 ??var obj = (function(){2 ????????window.a = 13 ????????...4 ????????return {5 ????????a,b,c6 ?????}7 ?????})();

扩充知识点:

????变量、属性 ?的区别:
????变量前面没主(默认主为window)
????属性前面有主(主就是.前面的对象)

????函数、方法 ??的区别:
????函数前面没主(默认主为window)
????方法前面有主(主就是.前面的对象)
1 let a = {} ?//a变量2 window.name= " " ?//属性3 4 function fn(){...} //函数5 string.substring();//方法6 arr.push() //点儿 . 前面的就是主

js中的闭包

原文地址:https://www.cnblogs.com/MrZhujl/p/9865365.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved