带你深入理解什么叫js闭包

带你深入理解什么叫js闭包闭包用一句话总结:闭包就是作用域的延伸解释:函数内部的作用域属于局部作用域,导致只有函数内部才可以访问声明的变量。而闭包可以将局部作用域延伸,使其在函数外部也可以访问内部声明的变量等。关于变量的作用域js变量的作用域无非就两种局部变量和全局变量JavaScript在函数内部可以访问全局变量varn=0;//全局变量functionf1(){console.log(n)//0}f1();而在函数内部声明的局部变量,外部无法直接访问functionf1(

大家好,又见面了,我是你们的朋友全栈君。

闭包

用一句话总结:闭包就是作用域的延伸
解释:函数内部的作用域属于局部作用域,导致只有函数内部才可以访问声明的变量。而闭包可以将局部作用域延伸,使其在函数外部也可以访问内部声明的变量等。

关于变量的作用域

js变量的作用域无非就两种 局部变量全局变量

JavaScript在函数内部可以访问全局变量

var n = 0;//全局变量
function f1() { 
   
    console.log(n)//0
}

f1();

而在函数内部声明的局部变量,外部无法直接访问

function f1(){ 
   
    var n=0;//局部变量 
 	//需要注意的是一定要使用var关键字声明才会是局部变量
 	//若直接 n=0; n则是一个全局变量,外部可以访问
}
console.log(n)//n is not defined

此时思考一个问题,怎么样才能在外部访问函数内部的局部变量??

此时闭包的作用就体现出来了,看下方例子

function f1() { 
   
    var n = 0;
    // 此时f2函数就是闭包
    function f2() { 
   
        return n
    }
    return f2()
}
let n1 = f1();
console.log(n1)//0

解释:f1是f2的父级,所以在f2中可以访问f1中的局部变量,那么转换一下思路,通过 f2函数 将变量return出来,这样不就可以在f1函数的外部访问内部变量了吗

f2函数起到一个中间连接作用,在上面代码中f2函数就是闭包。换句话讲:闭包就是 可以访问到其他函数内部的变量 的函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150273.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月18日 下午3:46
下一篇 2022年6月18日 下午3:46


相关推荐

  • 【数据结构】二叉树[通俗易懂]

    【数据结构】二叉树

    2022年1月29日
    52
  • 母版页中ContentPlaceHolder 控件的作用

    母版页中ContentPlaceHolder 控件的作用文章转自http://wenku.baidu.com/link?url=7sLN0ihgZQ1XfX47b_y8qbpIVjS5T75Q1xvaoyIQ6OiKIgvzyVyRccnU9e9fqoOm4DBTxNyPPIpgGlq8n5l4cePZngx1J-va9PNFmdRn2se母版页中ContentPlaceHolder控件的作用。当母版页被一个页面引用时,页面内容…

    2022年7月13日
    20
  • 数据仓库(二)之维度建模篇

    数据仓库(二)之维度建模篇概述 维度建模是一种将数据结构化的逻辑设计方法 它将客观世界划分为度量和上下文 度量是常常是以数值形式出现 事实周围有上下文包围着 这种上下文被直观地分成独立的逻辑块 称之为维度 它与实体 关系建模有很大的区别 实体 关系建模是面向应用 遵循第三范式 以消除数据冗余为目标的设计技术 维度建模是面向分析 为了提高查询性能可以增加数据冗余 反规范化的设计技术 维度建模优点

    2026年3月20日
    2
  • pychrome 激活码2021【在线注册码/序列号/破解码】

    pychrome 激活码2021【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    53
  • 手把手教你移植bluez 5.47蓝牙协议栈

    手把手教你移植bluez 5.47蓝牙协议栈目录背景编译 bluez1 glib 的编译 1 1 编译 zlib1 2 编译 libffi1 3 编译 glib2 DBUS 编译 2 1 编译 expat2 2 编译 DBUS3 readline 的编译 3 1 编译 ncurses3 2 编译 readline4 libical 编译 5 bluez 的编译 5 1 copy 所有依赖库的 pkg 文件到一个公共的路径并

    2026年3月17日
    1
  • PMOS开关电路_大功率mos管开关电路

    PMOS开关电路_大功率mos管开关电路本次项目上需要实现的功能是利用AO3401PMOS设计一个开关电路,实现一款设备的开关控制。被控设备12V供电,供电电流小于3A即可。且为了提高响应速度,使流过该设备的电流尽可能的大。该设备内阻大约为6ohm。AO3401产品参数其他参数芯片内部等效电路引脚顺序设计电路设计并调试好的电路如下图所示,由于供电电压和驱动电压均可以使用12V,所以采用了如下较为简单的方案。如图所示,Q9AO3401的栅极(G)通过100k电阻上拉到12V,源级(S)直…

    2026年2月5日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号