博客
关于我
JavaScript作用域和作用域链
阅读量:671 次
发布时间:2019-03-17

本文共 826 字,大约阅读时间需要 2 分钟。

JavaScript作用域和作用域链

作用域在编程中是一个非常重要的概念。简单来说,作用域决定了代码运行时变量、函数和对象的可访问性。它有点像一个独立的地盘,使得变量和资源不会外泄,避免在不同作用域下产生冲突。

在JavaScript中,作用域的概念可以追溯到ES6之前,当时并没有块级作用域,只有全局作用域和函数作用域。这种情况下,代码中的变量有时候会产生意想不到的影响。例如:

var age = 10;function sum() {  var num = 10;  return ++age;}sum(); // age变成了11

在此示例中,age属于全局作用域,因此函数内部的++age会修改全局变量。而num则属于局部作用域,只能在函数内部使用。因此,在执行完sum()后,num在全局环境下是无法访问的,这就是为什么会报错。

这样设计的一个重要原因是,,全局变量的变化会对整个程序产生影响,而局部变量则更具有灵活性和安全性。

接下来,我们来看作用域链的概念。一个常见的误解是认为作用域是互不相连的,不过实际上作用域是通过链式结构连接的。根据“就近原则”,内部函数可以访问外部函数的变量,但反过来却不行。例如:

var a = 20;function fn() {  var a = 10;  console.log(a); // 输出10}fn();

在上述代码中,a的全局和局部都有定义,但当console.log(a)执行时,它会优先访问局部作用域的a,因为函数内部的a比全局的a更接近。如果没有找到,就会向上一级查找。这个特性被称为“假借近原则”。

通过这种机制,JavaScript能够方便地对变量进行 scopes管理,同时确保代码的安全性和可读性。在现代JavaScript中,块级作用域(如if、循环、函数体内)被引入,这为开发者的变量管理带来了更大的灵活性。不过,掌握作用域链仍然是理解JavaScript内机制的关键。

转载地址:http://nouhz.baihongyu.com/

你可能感兴趣的文章
JUC-1.2-线程池-钩子方法的使用
查看>>
html5 h5学习总结
查看>>
webpack的安装和使用
查看>>
react 之 HOOK 简介
查看>>
centos安装python3.x
查看>>
编译原理-词法分析
查看>>
Unable to run Intel® HAXM installer: 无法启动过程,工作目录
查看>>
WslRegisterDistribution failed with error: 0x800701bc
查看>>
POJ 3666 Making the Grade 线性DP
查看>>
POJ - 3617 Best Cow Line
查看>>
14栈和队列的应用-数制的转换
查看>>
Vue.js学习-10-Vue.js计算属性set get 简单学习
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
解决Max retries exceeded with url的问题
查看>>
研发效能工具集
查看>>
saas创业八阶段-4、团队复制阶段
查看>>
【AI全栈二】视频流多目标多类别无延迟高精度高召回目标追踪 YOLO+Deepsort 全解
查看>>
2020 祥云杯misc 到点了
查看>>
Linux——系统安全及应用(开关机安全机制、系统弱口令检测、NMAP)
查看>>
C语言共用体union
查看>>