你不知道的JavaScript---深入理解 JavaScript 作用域

你好,我是小白Coding日志,一个热爱技术的程序员。在这里,我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客,一起在技术的世界里探索前行吧!

1. 什么是作用域?

作用域是 JavaScript 中一个非常重要的概念,它决定了变量和函数在代码中的可访问性和生命周期。作用域分为全局作用域和局部作用域。

全局作用域

全局作用域是整个 JavaScript 程序中都可以访问的范围。在浏览器环境中,全局作用域通常是指 window 对象。

var globalVar = 'I am global'; // 全局变量function globalFunction() {console.log(globalVar); // 在函数内部可以访问全局变量
}globalFunction(); // 输出: I am global
console.log(globalVar); // 输出: I am global

局部作用域

局部作用域是指在函数内部定义的范围,只有在函数内部才能访问的变量。这种作用域可以防止变量污染和命名冲突。

function localScope() {var localVar = 'I am local'; // 局部变量console.log(localVar); // 在函数内部可以访问局部变量
}localScope(); // 输出: I am local
console.log(localVar); // 报错: localVar is not defined

2. 变量声明与作用域

在 JavaScript 中,变量的声明方式对其作用域产生影响。

var 关键字

使用 var 关键字声明的变量存在函数作用域,即在函数内部定义的变量在函数外部是不可访问的。

function varScope() {if (true) {var localVar = 'I am a var variable'; // 使用 var 声明的变量}console.log(localVar); // 在函数内部可以访问 var 变量
}varScope(); // 输出: I am a var variable
console.log(localVar); // 输出: I am a var variable

let 和 const 关键字

ES6 引入了 letconst 关键字,它们引入了块级作用域概念,使得变量在 {} 内部声明时仅在该块级作用域内有效。

function blockScope() {if (true) {let blockVar = 'I am a let variable'; // 使用 let 声明的变量const constVar = 'I am a const variable'; // 使用 const 声明的变量}console.log(blockVar); // 报错: blockVar is not definedconsole.log(constVar); // 报错: constVar is not defined
}

3. 作用域链

作用域链是 JavaScript 中非常重要的概念,它决定了函数内部变量的访问规则。

function outerFunction() {var outerVar = 'Outer variable';function innerFunction() {console.log(outerVar); // 内部函数可以访问外部函数的变量}innerFunction();
}outerFunction(); // 输出: Outer variable

在上面的例子中,内部函数 innerFunction 可以访问外部函数 outerFunction 中定义的变量 outerVar,这就是作用域链的机制。

4. 闭包

闭包是 JavaScript 中非常重要的概念,它允许函数访问其词法作用域外部的变量,即使函数在外部作用域执行完毕后仍然能够访问这些变量。

function outerFunction() {var outerVar = 'Outer variable';function innerFunction() {console.log(outerVar); // 内部函数形成了闭包,可以访问外部函数的变量}return innerFunction;
}var closure = outerFunction();
closure(); // 输出: Outer variable

在上面的例子中,innerFunction 形成了闭包,它可以访问外部函数 outerFunction 中定义的变量 outerVar

5. this 关键字与作用域

在 JavaScript 中,this 关键字指向当前执行上下文中的对象。其值取决于函数的调用方式。

var obj = {prop: 'Hello',greet: function() {console.log(this.prop); // this 指向 obj 对象}
};obj.greet(); // 输出: Hellovar func = obj.greet;
func(); // 输出: undefined

在上面的例子中,当通过 obj 对象调用 greet 方法时,this 关键字指向 obj 对象。但是,当将 greet 方法赋值给 func 变量后,this 关键字指向了全局对象(在浏览器环境中是 window 对象),因为此时函数的调用方式发生了改变。

结语

作用域是 JavaScript 中至关重要的概念之一,深入理解作用域规则和原理有助于编写更加清晰、可维护的代码。通过本文的介绍,希望读者能够更加深入地理解 JavaScript 作用域,并能够在实践中灵活运用。
最后还是那句话:即使代码逻辑很简单,也值得记录下来。我的编程目标是避免重复造轮子!😊
如果觉得有用,就给我点个赞吧😁
探索更多有趣知识,欢迎关注我的微信公众号!每天分享精彩内容,与你一同探寻知识的边界。扫码即可订阅,一起开启知识新旅程!🚀📚
关注我的技术博客,探索前沿科技与实用开发技巧。一起携手走向代码的精彩世界!🚀💻 不错过每一篇精彩!

https://www.xiaobaicoding.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MY-Java高级面试题

1. jdk1.7 到 jdk1.8 Map 发生了什么变化 ( 底层 )? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组 链表结构变成数组 链 表 红黑树。也就是说在 JVM 存储 hashMap 的 K-V 时仅仅通过 key 来决定每一个 entry 的存 储槽位&…

网络安全:重要性与应对措施

1. 网络安全的重要性 随着互联网的普及和信息技术的快速发展,网络安全问题已经变得日益突出。网络攻击者可以通过各种手段窃取个人信息、破坏系统、传播病毒等,给个人和社会带来巨大的损失。因此,网络安全已经成为信息化时代的重要问题之一。…

【MySQL】如何判断一个数据库是否出问题

在实际的应用中,其实大多数是主从结构。而采用主备,一般都需要一定的费用。 对于主备,如果主机故障,那么只需要直接将流量打到备机就可以,但是对于一主多从,还需要将从库连接到主库上。 对于切换的操作&a…

pta L1-013 计算阶乘和

L1-013 计算阶乘和 分数 10 全屏浏览 切换布局 作者 陈越 单位 浙江大学 对于给定的正整数N,需要你计算 S1!2!3!...N!。 输入格式: 输入在一行中给出一个不超过10的正整数N。 输出格式: 在一行中输出S的值。 输入样例: …

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记16:蓝桥杯编程手册

一、要背的函数汇总(以例子形式) 1.GPIO相关 输出:HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 | GPIO_PIN_9,GPIO_PIN_SET) 输入:HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) 翻转:HAL_GPIO_TogglePin(GPIOC,0xFF) 2.LCD相关 …

百度获评CCIA数据安全和个人信息保护社会责任评价“三星”示范单位

日前,由中国网络安全产业联盟(CCIA)数据安全工作委员会主办的“促进数据安全合规流通使用”专题研讨会(CCIA数安委年度会议)成功举办。与会介绍了数据安全和个人信息保护社会责任试点评价工作的开展情况,并…

LangChain-11 Code Writing FunctionCalling 大模型通过编写代码完成需求 大模型计算加法

背景简介 我们知道GPT模型对于内容的输出,是对下一个字符的预测,通过概率选出下一个文本。 而且我们也知道,训练样本是非常庞大的,对于GPT来说,也是有可能学习过1 1 2的。 当我们向GPT询问11 时,完全可以…

Android 14 vold 分析(3)vold和mount service通信

vold和mount service都是binder service,并不是mount service只调用vold,vold也会调用mount service,这是双向的,这里解答上一章的问题 思考, vold比mount service启动的早,那开机时vold获取到的listener为…

FME学习之旅---day21

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 教程:AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式:使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色,而…

Leetcode 374. 猜数字大小

猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。 你可以通过调用一个预先定义好的接口 int guess(int num)…

电商行业网络安全不可小视,如何保障网商平台的稳定

随着互联网的全面普及,基于互联网的电子商务也应运而生,并在近年来获得了巨大的发展,成为一种全新的商务模式,被许多经济专家认为是新的经济增长点。 作为一种全新的商务模式,它有很大的发展前途,同时&…

为什么pdf拆分出几页之后大小几乎没有变化

PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因: 图像压缩: 如果 PDF 文件中包含图像,而这些图像已经被压缩过,拆分后的页面依然会保留这些压缩设置,因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…

基于Java+SpringBoot+vue3+uniapp口红销售/商城管理系统设计与实现

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

java错误记录

文章目录 javaslf4j中log不存在 maven编译出现Non-resolvable import POM: Failure to find类找不到jdk版本不对 java slf4j中log不存在 解决方法:再idea中安装lombok插件。 离线下载地址 https://github.com/mplushnikov/lombok-intellij-plugin/releases&#x…

【二分查找】Leetcode 点名

题目解析 LCR 173. 点名 算法讲解 1. 哈希表 class Solution { public:int takeAttendance(vector<int>& nums) {map<int, int> Hash;for(auto n : nums) Hash[n];for(int i 0; i < nums[nums.size() - 1]; i){if(Hash[i] 0)return i;}return nums.si…

实验模拟gfs 五大逻辑卷

目录 一 实验环境 二 4台服务端准备工作 1&#xff0c;66,77,88,99 四台机器加4块磁盘 2&#xff0c; scan 刷新磁盘供电接口 并查看 3&#xff0c;改主机名&#xff0c;方便后续操作 4&#xff0c;为加快访问速度 写hosts文件 做映射&#xff08;55客户机也写&…

Google Cookie意见征求底部弹窗

关于欧盟 Cookie 通知 根据2024年欧盟的《通用数据保护条例》以及其他相关法规&#xff0c;要求google cookie的使用必须征求用户的同意&#xff0c;才能进行收集用户数据信息&#xff0c;因此跨境独立站&#xff0c;如果做欧洲市场&#xff0c;就必须弹出cookie收集数据弹窗&a…

【MATLAB源码-第183期】基于matlab的图像处理GUI很全面包括滤波,灰度,边缘提取,RGB亮度调节,二值化等。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. RGB颜色亮度调整 1.1 RGB颜色模型 RGB颜色模型是一种加色模型&#xff0c;使用红色&#xff08;R&#xff09;、绿色&#xff08;G&#xff09;、蓝色&#xff08;B&#xff09;三种颜色的不同组合来表示各种颜色。每种…

svn 使用记录

还原某个文件到指定版本 svn export -r 10520 resanaly.lua --force 设置忽略指定后缀文件&#xff0c; 例如忽略 .lc 后缀的文件, -R 是递归文件夹&#xff0c;path 为指定的起始目录 svn propset svn:ignore -R “*.lc” path svn propget svn:ignore -R 查看忽略设置 设置后…

第9章 文件和内容管理

思维导图 9.1 引言 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。文件和非结构化内容也应是安全且高质量的。 确保文件和内容…