重识 JavaScript —— 作用域(二)

JS作用域+this指向 【JavaScript】 js作用域 this指向及关于this指向的面试题 箭头函数和普通函数的this指向区别 阅读详情

Javascript 语言特有的”链式作用域”结构(chain scope)

即子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

块作用域与函数作用域

函数可以访问函数外部申明的变量,但是函数外部不能反过来访问函数内部的局部变量。

需要注意的是在 JavaScript 中,区域块(if 、for、while、switch、try)内的变量是可以在区域块外部访问的。

try {
    var value1 = "from try block"
}catch(e) {

}

if(true) {
    var value2 = "from block";
}

var f3 = function() {
    var value3 = "from function";
}
console.log("value1: " + value1); // value1: from try block
console.log("value2: " + value2); // value2: from block
console.log("value3: " + value3); // Uncaught ReferenceError: value3 is not defined

不要忽略 var

Yes,don’t ignore var

不知道你刚开始写 JS 程序会不会在申明变量时忘掉写 var ,反正最初的我是觉得写和不写没差而不写 var

在申明变量不写 var 的时候会申明一个全局变量。而在 HTML 文档中,所有全局变量都属于 window 对象中。

也就是说你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
局部变量,包括 window 对象可以覆盖全局变量和函数。

foo = "hello";

console.log(window.foo == foo); // true;

// 实时证明当 JavaScript 运行在浏览器中时,全局变量会作为 window 对象的属性

// location = "https://baidu.com"; // 全局变量 location 会让浏览器跳转至该链接

需要补充说明的是在最外层的 <script></script> 中就算你使用 var 来声明变量和函数,这个成员也会归为 window 对象“所有”。对于这个现象我的理解是:最外层相当于是我们的最大的一个作用域,所以无论你怎么申明都会成为 window 的成员。

一图胜千言

这里写图片描述

这里的全局作用域是直接在 <script></script> 里、即 v1 、v2 的值会在 window 对象下,内层作用域可以访问外层的作用域,但是内层作用域里的值会被围墙围起来不让外层作用域访问。

疑问?

在 JS 里,我们有没有方法打破常规,在外层作用域访问内层作用域的值呢?

实测|龙虾机器人(OpenClaw)Windows系统部署全攻略(含避坑指南) 先简单科普下:龙虾机器人本质是一款开源AI代理框架,核心优势是“能行动、可本地、高灵活”——它不内置大模型,需要对接第三方AI接口(如GPT、Claude、阿里云百炼等),但能将AI的指令转化为实际的系统操作,相当于给AI配了一个“能动手的身体”,这也是它和普通对话大模型的核心区别。今天就结合自己的实测经历,从环境准备、分步部署、初始化配置,到常见问题排查,写一篇保姆级攻略,不管是新手还是有一定技术基础的同学,都能跟着一步步完成部署,少走弯路~解决方案:检查聊天软件插件是否安装成功,权限是否配置完整; 阅读详情

相关推荐

CoppeliaSim+matlab+simulink七轴机械臂仿真

七轴机械臂vrep+matlab+simulink 仿真

a1233219的博客 3550

JavaScript(JS) array.concat(value1, value2, ..., valueN)

Array对象允许在一个变量中存储多个值。它存储相同类型元素的固定大小的顺序集合。数组用于存储数据集合,但将数组看作同一类型变量的集合通常更有用。本文主要介绍JavaScript(JS) array.concat(value1, value2, ..., valueN) 方法。 原文地址:JavaScript(JS) array.concat(value1, value2, ..., valueN) ...

m0_60105488的博客 244

IPSec Over GRE和GRE Over IPSec技术

IPSec Over GRE 和 GRE Over IPSec 一. 技术介绍 IPsec     主要作用是对数据进行加密,因为他能提供所有有时候被单独用作实现加密的一种方法!IPsec建立的是一个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不支持非ip流量,也不支持广播(组播)! GRE     (通用路由封装)能很好的提供一个真正意义上的点对点的隧道,GRE是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、Apple Talk、IP等)的报文进行封装,使封装后

qq_56228347的博客 9870

JavaScript作用域之我见

我相信很多C系语言的学习者和使用者,在学习和使用javascript的时候,总会被其变量作用域迷惑一下, 我觉得这是很正常的,因为他确实跟c和java等不太一样变量作用域的概念 在程序设计中,变量的可访问性和生命周期都是有一定范围的,而这一定范围就是变量的作用域,也就是说,作用域控制着变量的可访问性和生命周期JavaScript中没有块级作用域,只有函数作用域 Java:class Person

静夜思 798

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 70

机器学习特征选择-t检验

在特征选择的过程中通过计算检验统计量值,比较特征之间的统计量的大小,并降序排列,选取统计值较高的特征,从而起到去除差别小的特征(此差别小的特征难以区分不同的额类别)的目的。 以t检验(Student's t test)为例: 假设检验 通过比较两类样本的随机变化,通过计算其p值决定是否拒绝零假设,也即是说:通过计算p值,若p值小于某一阈值则认为两个样本具有显著差异,两个样本是不同的,此时拒绝...

heda3的博客 6700

JS复习整理1_基础与常识

1.六种数据类型 5种基础的:Undefined,Null,Boolean,Number,String(其中Undefined派生自Null) 1种复杂的:Object(本质是一组无序键值对) 2.字符串转数字 Number(str):先求值再转换(先valueOf再toString都不行就是NaN),一般与我们的预期结果不一样,比如Number(”)=Number(false)=Number(null)=0而var x;Number(x)=NaN。。。所以一般都用下面两种方式 parseInt(str):

weixin_42583552的博客 239

DeepSeek在实时计算与流处理系统中的突破性实践

对于技术决策者而言,现在正是将DeepSeek实时计算技术纳入企业架构蓝图的关键时机,那些能够率先构建实时智能能力的企业,将在数据驱动的商业竞争中赢得决定性优势。DeepSeek通过创新的流处理架构,成功将复杂事件处理(CEP)的延迟降低到亚秒级,同时保证了计算结果的精确性。DeepSeek研发的神经架构搜索(NAS)与知识蒸馏联合优化框架,可在保持模型精度的前提下,将参数量压缩至原始模型的1/100,实现边缘设备的实时AI推理。随着5G和物联网技术的普及,对实时处理能力的需求将呈指数级增长。

Programming Talk 291

JavaScript(二)

JS交互

snowyfly的博客 369

FineBI学习总结

交叉表:一组作为行标题显示在表的左部,另一组作为列标题显示在表的顶部。连接到数据,如果数据不满足数据分析的需求,先进行自助数据集处理。数据集分类:DB表、SQL、Excel、自助数据集。分组表:将报表中的数据按相同项合并为一组显示。1、数据准备2、制作仪表板3、分享仪表板。左合并:保留左边全部数据,合并右边。右合并:保留右边全部数据,合并左边。上下拼接:上下拼接到一张表数据。3、如何实现拼表:多表拼一张。分组–业务包–数据集–字段。字段分类:数值、文本和日期。目录–仪表板–数据准备。维度:文本和日期类型。

Rsun2018的博客 1561

095、PCIE物理层测试模式:从信号眼图到误码率实战

本文介绍了PCIe物理层测试模式的调试方法和实战经验。重点解析了环回测试、合规性测试和静默模式的应用场景及配置要点,分享了信号眼图分析、误码率测试和接收端验证的实用技巧。作者结合自身调试经历,强调物理层测试对排查信号完整性问题的重要性,建议在量产前进行基础测试,并提醒注意芯片勘误和测试模式切换等易错点。通过合理使用测试模式,可显著提高PCIe链路调试效率,确保物理层稳定可靠。

z534437748的博客 60

js 代码优化点

尽量不要操作dom元素, 使用使用逻辑短路替换三元运算符 var value=true; value?value=2:'' value && value=2 使用对象属性替换if-else // if版本 if (a == 1) { return 'one'; } else if (a == 2) { return 'two'; } else if (a == 3) { return 'three'; } else { return ...

想飞的猪的博客 408

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

JavaScript作用域详解

作用域是JavaScript中一个重要的概念,它决定了变量和函数在代码中的可访问性和可见性。了解JavaScript的作用域对于编写高效、可维护的代码至关重要。本文将深入介绍JavaScript作用域的不同类型、作用域链以及闭包等相关内容。

00后|互联网💻|办公室🍵茶农,希望通过技术改变生活|爱折腾💪|收集各类📚网络资源,好物不私藏,点点关注,不迷路。 全网搜:阿宇的编程之旅 or 阿宇的宝库 2726

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JavaScript作用域

作用域通常用来限制变量/函数的使用范围并规定JS引擎如何去寻找所要使用的变量例如:如果不对变量的使用范围进行限制,那么在上面程序执行时,打印的结果应该分别是什么?如何保证程序的执行结果是我们想要的结果?这就是为什么要创建作用域作用域会像一个盒子一样保存在其中定义的变量/函数,当JS引擎需要使用某个变量/函数,会优先在当前作用中进行寻找,如果当前作用域中不存在所需的变量/函数时,JS引擎会向外层作用域寻找该变量/函数但是这又出现了一个问题,如何确定外层作用域是哪一个作用域,作用域之间的关系是如何确定的。

优快云_Random_Name的博客 1350

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

前端js入门——JavaScript 作用域

在MDN或者其他权威教程上,对于作用域的解释无一例外是与可见性和生命周期相关。 作为最重要的概念之一,初学者往往会惑于上述高大上的理论阐述。 所以从浅显处入手,可能更有助于对于概念的入门和深入理解。 作用域通俗的讲就是变量或者函数的“势力范围”,在此范围内,变量可以被引用,函数可以被调用。 JavaScript具有两种作用域: (1).全局作用域。 (2).函数作用域。 特别说明:ES2015新增...

fenghulun的博客 7403

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JavaScript 作用域全面总结

本文章详细讲解了javascript中关于作用域的详细知识点解剖,详细的讲解了各种作用域

x15514104477的博客 1874

js的函数作用域跟块级作用域

一,js中的作用域     js中除了全局作用域,还有函数作用域。     嗯,还有块级作用域。 二,函数作用域跟块级作用域的区别     当将代码看成一个IIFE时,全局作用域其实就是一个函数作用域。     那么函数作用域跟块级作用域的区别是什么呢?           函数作用域:变量在定义的函数内及嵌套的子函数内处处可见;           块级函数域:变量在离开定义的块级

huangjq36SYSU的博客 1万+

JavaScript作用域与闭包

一、作用域 二、闭包

qq_48113035的博客 3378

重识JavaScript代码如何执行(闭包,作用域,this指向)

JavaScript代码如何执行,我们应该都会大概有些了解,V8引擎,单线程,回调队列,除此之外,一些基本的需要掌握有执行环境、词法环境、作用域、执行上下文、闭包等内容。其实很多时候,我们大致都知道是怎么个回事,可有很难把这些区分清楚,分别如何去描述。 JavaScript 代码运行的各个阶段 JavaScript 是弱类型语言,在运行时才能确定变量类型。即使是如今流行的 TypeScript,也只是增加了编译时(编译成 JavaScript)的类型检测(对于编译器相信大家都有所了解,代码编译过程中编译器会

flym_的博客 321

JavaScript 作用域与作用域链

作用域链是JS引擎实现变量访问的核心机制,其本质是: 由函数定义时的词法作用域决定的“变量查找链路”; 遵循“向上查找、内层遮蔽外层”的规则; 是闭包、模块化等高级特性的底层支撑。 理解作用域链,能帮助我们更清晰地分析变量的可见性、避免命名冲突,并掌握闭包等进阶概念。

chanyeol14805的博客 1068

JavaScript中的作用域是什么以及有哪些类型的作用域

如果JavaScript支持动态作用域,那么函数内的变量查找将是基于函数调用的栈帧,而不是函数定义的位置。幸运的是,JavaScript采用的是词法作用域,这使得代码更加可预测和易于理解。这使得我们可以预测函数的行为,因为它的行为取决于定义时的上下文,而非运行时的上下文。除了上述的基本作用域外,随着ES6标准的引入,JavaScript增加了块级作用域的概念,进一步丰富了作用域的类型。函数作用域是最经典的作用域形式,它指的是函数内部创建的变量只在该函数内有效。与函数作用域不同的是,块级作用域内的变量使用。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1399

JavaScript中的作用域及作用域链

一、作用域 概念:变量和函数的可访问范围,控制着变量和函数的可见性与生命周期变量的作用范围 1、全局作用域(全局变量):在函数外部定义的变量或在函数内部没有使用var声明的变量。在浏览器页面没有关闭之前一直占用内存空间。比较耗费内存。在浏览器页面关闭时才释放内存 2、局部作用域(局部变量):在函数内部用var关键字定义的变量。只在函数内部起作用,函数调用结束后,局部变量所占的内存就会被释放。 var a=3; //全局变量 function fn(b){ //局部变量 .

m0_46420078的博客 2817

js作用域详解

作用域详解 一. 了解作用域 二. 作用域分类 三. 作用域的上下级关系 四. 作用域的三大规则 一. 了解作用域 在介绍作用域的定义之前,先解释一下”作用”和”域”的含义 作用:指生效,可以使用 域:范围 总结来说,就是一个变量可以生效的范围。变量不是在所有地方都可以使用的,而这个变量的使用范围就是作用域 二. 作用域分类 1.全局作用域 一个 html 页面就是一个全局作用域,打开页面的时候, 作用域就生成了, 直到关闭页面为止 2.局部作用域(私有作用域)

tx_blogs的博客 3115

JS 作用域及作用域链

JS 作用域及作用域链 一、作用域   在 Javascript 中,作用域分为全局作用域和函数作用域   全局作用域:     代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。   函数作用域:     在固定的代码片段才能被访问      例子:          作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的。如上,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。     作用域最大的用处就是隔...

cxu123321的博客 1844

JavaScript---变量作用域

也就是在函数内部声明的变量,在函数外部无法访问,在函数内部,该变量都可以被访问。类似,在块级作用域内声明的常量,仅在该块级作用域内可访问。如果内联 JavaScript 代码创建了新的变量,这些变量会成为。在同一函数内部的顶部声明,那么三者具备相同的作用域”循环等)内声明的变量,仅在该块级作用域内可访问。”,它允许在变量声明之前就使用该变量。,这意味着在块级作用域(如。具备不同的作用域,但它们都。甚至在声明之前也可访问(声明常量,就必须同时进行。

zheshiyangyang的博客 1328
上一篇: 重识 JavaScript —— 方法的重载(一)
下一篇: 重识 JavaScript —— 闭包(三)
xiaoping0915
博客等级 码龄12年 158粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值