问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

JavaScript作用域与作用域链使用重点讲解

发布网友 发布时间:2天前

我来回答

1个回答

热心网友 时间:2天前

作用域和作用域链是JavaScript中的重要概念,它们决定了变量在代码中何时可见及其作用范围。理解这些概念对于编写高效且无误的代码至关重要。我们先看一个例子:
var a = 'jack';
function fn() {
var a = 'frank';
}
console.log(a);
在这里,外部定义的变量a是全局变量,而函数内的a是局部变量。因此,console.log输出的是全局变量a的值,即'jack'。

如果我们将函数代码块改为if语句,结果会怎样呢?
var a = 'jack';
if(true) {
var a = 'frank';
}
console.log(a);
在这里,if语句内的a会变成全局变量,因此输出为'frank'。这是因为if语句执行完毕后,其内部定义的变量会变成当前执行环境的变量。

让我们再看看for循环和while循环的情况:
for(var i = 0;i < 3;i++) {
break;
}
console.log(i);
var k = 5;
while(k > 1) {
k--;
var d = 10;
}
console.log(k);
console.log(d);
在这里,无论是for循环还是while循环,内部定义的变量k和d都会变为全局变量。

ES6引入了块级作用域,使用let或const定义的变量具有局部作用域。例如:
for(let i = 0;i < 3;i++) {
break;
}
console.log(i);
var k = 5;
while(k > 1) {
k--;
let d = 10;
}
console.log(k);
console.log(d);
这里,let定义的变量i和d具有块级作用域,不会污染全局环境。

现在我们回到前面的例子,增加了一个全局变量b,函数内调用了两次console.log,输出结果会是什么?
var a = 'jack';
var b = 'andy';
function fn() {
var a = 'frank';
console.log(a);
console.log(b);
}
fn();
console.log(a);
在这个例子中,第一个console.log输出局部变量a的值'frank',第二个console.log输出全局变量b的值'andy'。这是因为作用域链决定先查找局部变量,再查找全局变量。

接下来我们看一个变量提升的例子:
var a = 'jack';
function fn() {
console.log(a);
var a = 'andy';
console.log(a);
}
fn();
这里,a在函数内被提升到顶部,但并未赋值,因此输出'undefined'。

最后,我们再来看一个函数内部定义函数的例子:
var a = 'jack';
function fn() {
console.log(a);
var a = 'andy';
console.log(ss());
function ss() {
return a;
}
}
fn();
在这个例子中,函数ss在顶部调用,因此输出'andy'。

通过以上例子,我们能够更好地理解JavaScript中的作用域和作用域链。正确地管理变量的作用域可以避免许多常见的错误,提高代码的可读性和可维护性。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Win10内置Windows Defender如何开启广告软件拦截 《禁忌女孩》第二季开播评分依旧相当高,这部剧为何这么受欢迎? 本科后面是研究生还是博士 研究生是大学生么 硕士研究生博士怎么排名 丛林僵尸游戏机游戏简介 浣熊市行动游戏解说 死亡之城2游戏 方块僵尸是什么游戏一款打僵尸的手机游戏都是方块人还可以在地上捡枪... 全国范围内哪些城市可以做正颌手术比较靠谱? 菜鸟求助:js中作用域的问题 如何在电脑安装蓝牙电脑怎么连接蓝牙啊 电脑蓝牙怎么连电脑怎么连接蓝牙啊 台式电脑怎么不能连接蓝牙耳机台式机如何连接蓝牙耳机 蓝牙耳机怎么连接到电脑电脑怎么蓝牙连接 电脑如何连接蓝牙蓝牙耳机怎么连接电脑如何在PC上使用蓝牙耳机 如何避免闭口反复出现? 如何预防黑头闭口再次产生? 怎样护理肌肤能改善闭口? 如何预防闭口再次出现? 睡前做哪些皮肤护理可以避免皮肤出现闭口? 孩子蛮横无理该怎么办 办理临时身份证需要多长时间啊最慢的 达州陆军医院医院介绍 达州陆军医院医院科室 暮光之城中的爱德华是什么样类型的男人 爱德华暮光之城 固态特斯拉线圈功率放大电路 红楼梦第74回——抄检大观园事件本末 红楼梦最精彩的章回有哪些? 学废了,JavaScript 中的作用域与作用域链 翻译:理解JavaScript中的作用域和作用域链 【温故而知新】JavaScript作用域/作用域链 虎耳草施肥方法虎耳草用什么肥料? 汉字找茬王三国聚餐攻略-汉字找茬王三国聚餐答案 系统之家正版win732位旗舰版推荐下载 重装正版win7系统下载软件 11平台开始游戏后自动WAR3退出 在11平台打dota时出现War3应用程序错误 为什么我的11平台的dota不能玩 11玩dota时会弹出war3出错 什么情况?从同学那从新烤了魔兽也是这样 求... 在深圳的这些定制巴士如嗒嗒,小猪,嘟嘟这些按照路程,票价 驿步巴士,小猪巴士,有用过吗?哪个更靠谱! 怎么样查询我附近小猪巴士的线路 个人的旅游大巴可以像小猪巴士一样跑定制路线么 有谁坐过小猪巴士的车,感觉怎么样? 深圳嗒嗒巴士或小猪巴士,有上沙村到书城/人民桥的班线吗?为什么手机安 ... 小猪巴士地址在哪里? ...出现了“Disk error Press any key to restart ”,怎么办啊,谢啦... DISK ERROR PRESS ANY KEY TO RESTART的中文啥意思!用U盘安…
  • 焦点

最新推荐

猜你喜欢

热门推荐