【Javascript】闭包之块级作用域

【高频考点精讲】闭包与作用域链的深度解析:从变量提升到块级作用域,掌握JS执行机制 写出更可靠的代码避免常见陷阱设计更优雅的架构轻松应对相关面试题最后留个思考题:如何用闭包实现一个只能调用一次的函数?欢迎在评论区分享你的实现,全栈老李会挑选有趣的做法进行解析。 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展。博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

在js中我们应该尽量避免使用全局变量和全局函数,以防止发生命名冲突,那么要如何避免呢?js中有一个闭包的概念,现在我们使用闭包中块级作用域来讲解,这也是闭包中最重要的概念。

js本身是不支持像C/C#/java…这样的语言中有块级作用域的,即在语法块中定义的变量,在语法块外面是无法访问到的。

那么,js要怎么去模拟像C这样的块级作用域呢?我们先来看一个栗子:

例如:

 test();
 function test() {
	(function(){
		for(var i=0;i<3;i++){
			console.log(i);//这个时候i就在**匿名函数里**面有效了,在**匿名函数外**无效,在匿名函数外,i就被销毁了
		}
	})();	
	console.log(i);//输出:undefined
}

在函数内部创建一个匿名函数,就相当于在函数内部创建了一个私有作用域,这对于在较大/多人开发的项目中是很好用的,这样每个程序员能在自己的功能函数中使用自己的变量不至于混乱、冲突。

22、JavaScript闭包与块级作用域模拟全解析 本文深入解析了JavaScript中的闭包和块级作用域模拟技术。内容包括闭包的基础概念、作用域链的创建与使用、闭包与变量的关系、this对象在闭包中的行为、内存泄漏问题以及如何通过匿名函数模拟块级作用域。同时分析了匿名函数作为块级作用域的原理及应用场景,并结合闭包和块级作用域的综合使用进行了探讨。最后总结了最佳实践和性能优化建议,帮助开发者更好地理解和使用闭包与块级作用域技术。 阅读详情

相关推荐

AHB不对称半桥反激电路设计(一)变换器拓扑工作原理详解

本文详细分析了AHB(不对称半桥)反激变换器拓扑的工作原理及关键优势。该拓扑通过谐振腔结构实现原边功率管的零电压开通(ZVS)和副边整流管的零电流关断(ZCS),显著提升效率至95%以上。文章阐述了6个工作阶段的时序特征,包括谐振电感电流和电容电压的数学模型推导。AHB拓扑具有漏感能量回收、宽电压输出(适配PD快充等场景)和协同储能等优势,相比传统方案可缩小变压器体积30%,成为100-300W隔离电源的理想选择。

【Simon】的博客 7120

JavaScript闭包-块级作用域和私有变量

块级作用域 块级作用域是指在由花括号包裹的代码块中的作用域。在JavaScript中是没有块作用域的。为了理解这个概念,来看下面的例子: for(var i = 0;i   ...... } alert(i); //结果会输出10     上面的代码中,我们在for循环中定义了变量i,在C++和Ja

飞鹰的专栏 1486

wsl2上运行带有Isaac Gym的程序报错: GPU Pipeline: disabled

显示GPU Pipeline:disabled,查找相关文档发现是WSL2目前不支持Isaac Gym,时,想要在wsl2上运行,最后报错如下。

2303_78660611的博客 956

作用域与闭包

作用域、闭包

qq_44053549的博客 1246

远程桌面项目

远程桌面项目

weixin_41560737的博客 1932

⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力

【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」

davidkorhenn的博客 1921

块级作用域的理解

块级作用于的概念 作用域永远都是任何一门语言的重中之中,因为它控制着变量和参数的可见性和生命周期。讲到这里,首先要理解两个概念:块作用域和函数作用域。什么是块级作用域呢? 任何一对花括号({})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 函数作用域就更好理解了定义在函数中的参数和变量在函数外是不可见的。 作用域分析 function fn1(x) { var a = 0; let b = 0; { var c = 1; // 未用le

m0_65937359的博客 1万+

双有源桥DC-DC变换器:原理、软开关与移相控制深度解析

隔离型DC-DC变换器是电力电子系统的核心部件,通过高频变压器实现电气隔离与电压匹配,保障系统安全与灵活适配。其工作原理基于功率半导体器件的开关动作,通过调制策略控制能量传输。该技术的核心价值在于实现高效、高功率密度的电能转换,并支持双向能量流动,这对于提升系统整体能效和运行灵活性至关重要。在新能源储能、电动汽车V2G及数据中心供电等场景中,双向能量流成为刚性需求,推动了如双有源桥等先进拓扑的应用。本文聚焦于双有源桥这一实现高效双向隔离变换的“明星”方案,深入剖析其利用移相控制实现软开关的机理。通过分析谐振

weixin_34195142的博客 378

JavaScript块级作用域, let, const介绍

let块级作用域ES6里增加了let,const, 声明在{}, -> “function,if ,for等” 的变量作用域被限制在块级。(严格模式下 function 变量属于块级作用域)例:{ let i = 0; } console.log(i); //报错Uncaught ReferenceError: i is not defined同时还可以解决闭包问题, 例如我们为10个div

翾的博客 2591

面经-2023-联发科MTK-数字芯片设计

面经-2023-联发科MTK-数字芯片设计

w0shishabi的博客 2943

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

什么是闭包?为什么有闭包?什么是块级作用域?为什么ES6要有let const var的区别?javascript,js

先来看一个例子 <script> window.onload = function(){ var abtn = document.getElementsByTagName('input'); for(var i=0; i<abtn.length; i++ ){ ...

水机.Threeki 772

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7922

JavaScript闭包--模仿块级作用域

在阅读这篇文章之前,建议先阅读JavaScript的作用域链以及JavaScript闭包–简介。正如闭包的定义一样:“闭包指的是有权访问另一个函数作用域中的变量的函数”, 闭包最大的意义就在于闭包可以对另一个函数作用域的变量进行访问,由此,闭包可以延伸出一系列的用法。模仿块级作用域JavaScript没有块级作用域的概念。这意味着在块语句中定义的变量,实际上是包含在函数中而非语句中创建的。从作用域链

saberVIII的博客 1537

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

javascript之块级作用域的概念和闭包

简单的块级作用域: javascript没有块级作用域的概念 function test(){ for(var i = 1 ; i <=5; i++){ //i alert(i); } alert(

指尖残雪 3948

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

js词法作用域、函数作用域和块级作用域以及闭包

1.函数作用域链:函数内部变量可以访问函数外部变量,但是函数外部变量不可以访问函数内部变量。 2.通过闭包使得外部变量访问函数变量, <script> function f1(){ var n = 123; return function () { return n; } } var a = f1()(); console.log(a);// 123 </script>

qq_37524886的博客 819

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

js闭包实现块级作用域和私有变量的访问

1、块级作用域 首先看下面的例子 function  test1(){ for(var i=0;i } alert(i); } test1();//10 上面的函数说明了变量i的作用域是整个函数,而不是for循环内,那么怎么才能 function  test2(){ for(var i=0;i }         var i; alert(i); } test

zhanglongfei1016的专栏 1111

JavaScript执行机制:变量提升、作用域链、词法作用域、块级作用域、闭包和this

本文详细介绍了JavaScript中的关键概念,包括作用域链、词法作用域、块级作用域、闭包和this。文章通过实例阐述了这些概念在JavaScript代码中的应用,以及它们在保证变量正确访问、提高代码可读性和可维护性方面的重要性。深入了解这些核心概念有助于编写高效、可维护的JavaScript代码,并充分利用JavaScript的强大表达能力。

陆业聪 1479

JS中的块级作用域

JS中是没有块级作用域作用域这个概念,为实现块级作用域可通过闭包的形式实现,下面通过一个例子来说一下JS中的块级作用域。function outputName(count){ for (var i = 0; i <count; i++) { console.log(i); } } cons

yihuoZhou的博客 1650

js html 5 产量作用域,JavaScript闭包-块级作用域和私有变量

块级作用域块级作用域是指在由花括号包裹的代码块中的作用域。在JavaScript中是没有块作用域的。为了理解这个概念,来看下面的例子:for(var i = 0;i < 10; i++){......}alert(i); //结果会输出10上面的代码中,我们在for循环中定义了变量i,在C++和Java等编程语言中,循环执行结束之后,for循环中的i变量会立刻被垃圾回收。但是在JavaScr...

weixin_42299346的博客 159

javascript_利用闭包模仿块级作用域

(function(){ //这里就是块级作用域 })(); 块级作用域 //无论在什么地方,只要临时需要一些变量,就可以使用块级作用域 function outputNumbers(count) { ( function() { for (var i = 0; i < count; i++...

dcz86106的博客 250

JavaScript函数表达式、闭包、模仿块级作用域、私有变量

函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程。匿名函数,是一种强大的方式,一下总结了函数表达式的特点:   1.函数表达式不同于函数声明,函数声明要求有名字,但函数表达式不需要,没有名字的叫匿名函数   2.在无法确定如何引用函数的情况下,递归函数就会变得比较复杂   3.递归函数应该始终使用arguments.callee来递归调用自身,不要...

ddb51181的博客 149

JavaScript的作用域和块级作用域概念理解

1、什么是块级作用域呢? 任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 2、函数作用域 定义在函数中的参数和变量在函数外部是不可见的。 3、大多数类C语言都拥有块级作用域,JS却没有。请看下文demo: ? 1 2 3 4 5 6 7 8 9 10 11 ...

215

js没有块级作用域但有函数作用域

js没有块级作用域但有函数作用域 任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。   作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。首先我们理解两个概念:块级作用域与函数作用域。   什么是块级作用域呢?   任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见...

weixin_45725033的博客 525
上一篇: 【Javascript】用 js 写一个模板引擎
下一篇: 【MongoDB】MongoDB入门(一)基本操作和常用命令
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值