首页 > 其他分享 >js中的闭包详解

js中的闭包详解

时间:2023-02-11 11:33:28浏览次数:42  
标签:闭包 function 外层 里面 函数 js 详解 变量

闭包:闭包的应用直接上代码理解:
function doSth(t,cb){
return function(){
if(--t === 0){
cb()
}
}
}
function logSth(){
console.log('嘿嘿嘿');
}
let fn=doSth(4,logSth);
fn()
fn();
fn();
fn();
每一次的结果其实都不一样;

总结一下:
闭包其实就相当于,一个外层函数,一个内层函数,内层函数依赖外层函数中的属性或者方法.外层函数将这个内层函数作为返回值return;也可以直接不声明变量,直接去接受一个匿名函数.这样都可以形成闭包:下面给出解释
闭包类型①
//在全局声明一个变量
function doSth(){
num=999
index='好小子',
like='你居然学会了闭包?'
//返回一个匿名函数
return function(){
console.log(index,num++,like)
}
}
这样就形成了闭包的一种类型
闭包类型②
function doSth(){
num=999
index='好小子',
like='你居然学会了闭包?'
bibao=function (){
console.log(num,index,like)
}
}
//这里需要注意,第②种类型的闭包里面的bibao前面不能够加声明关键词,比如var let const,加了这个函数就只是doSth里面的一个函数了

上面两种类型的闭包

第一种类型的闭包需要先执行一次最外层的函数,然后将返回值赋值给一个变量,这个变量可以是全局里面的变量,也可以是别的函数内部的变量.如果作为在别的函数内部变量,就需要你这个最外层函数是一个全局函数,这个最外层函数不会和别的函数形成闭包.

返回上面这一样说的两种变量:

①全局变量:如果是赋值给了一个全局变量,那么其实就相当于你在全局声明了一个对象了.所有人都可以通过调用这个变量的执行结果去获取到里面的属性值,就好像一个全局对象你去.出来里面的属性值一样

②局部变量:如果是赋值给了一个局部变量,那么起始就相当于你在这个局部变量里面声明了一个对象.这个局部变量所在的作用域里面的所有人都可以来访问到这个里面的属性值了.就相当于你在局部定义了一个对象,然后.出来这个对象里面的属性值一样

第二种类型的闭包:不需要执行外层的那么函数,因为赋值的变量直接就是属于window的,也就是相当于上面说的直接在全局里面声明了一个 对象,想要是用里面的属性值直接点就行,这里就是直接执行这个变量就行

标签:闭包,function,外层,里面,函数,js,详解,变量
From: https://www.cnblogs.com/yourgrandfather/p/17111102.html

相关文章

  • 标签的自定义属性操作 js 230211
    约定一般在自定义属性名前加上一个data-例如,index属性data-index设置属性按照约定的方式设置前缀加data-h2.setAttribute("data-index","6")获取属性格式1:标签对象.dataset......
  • 前端学习案例2-闭包的形式
       ......
  • JSP_指令_include&taglib指令与JSP_注释
    JSP_指令_include&taglibinclude指令:1.page:配置JSP页面的2.include:页面包含的。导入页面的......
  • [SA记录] P6095 [JSOI2015]串分割
    题目首先考虑到题目要求分割出的$k$个数中最大值尽量小,所以我们分割出的$k$个数的长度尽量相同。我们令$m=\lceil\frac{n}{k}\rceil$,那么这$k$个数中,有的长度为$m......
  • 前端学习案例16-js中的HMR
    ......
  • bootstrap-js插件1-55
    1引入css和js2复制html组件 3运行之后得到下拉框......
  • bootstrap-js插件2-56
    1大模态框引入html自己定义2说明就可以显示js调用script ......
  • Vue课程22-使用babel-loader处理高级的js语法
        //导入jqueryimport$from'jquery'//导入图片文件importlogofrom"./logo.jpg"//给img标签的src动态赋值$('.box').attr('src',logo)//定义jquery的入口import......
  • 歌谣-jsp学习-web技术的前世今生1
    Web服务器•1990年,第一个Web服务器开始运行•网站服务器•站点服务器•本质上是一个软件系统•安装了web服务器软件的计算机为什么没有流传•操作太复杂•页面不好看•……......
  • jsp初识-2
    早期的网站一般是用标准的HTML文件也就是静态网页制作的,通常没有后台数据库、不能和用户交互,内容更新起来相对也比较麻烦,适用于一些不需要经常更新的展示型网站。而动态......