博客
关于我
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/

你可能感兴趣的文章
2021年N1叉车司机模拟考试及N1叉车司机考试软件
查看>>
【奇淫巧技】Java动态代理(JDK和cglib)
查看>>
2021-05-11 现代操作系统 《现代操作系统 第4版》第3章 内存管理——总结(分段,分页,段页)(转载)
查看>>
MP4修改元数据日志记录
查看>>
WebView使用
查看>>
【Stimulsoft Reports.Net教程】使用DesignerFx
查看>>
攻防世界 Pwn 新手
查看>>
mybtis-plus 出现 Wrong namespace
查看>>
2008年7月20日星期日
查看>>
c#启动本机程序
查看>>
用户登陆的验证码的制作
查看>>
判断远程文件是否存在
查看>>
升级java11后,maven命令打包报错
查看>>
springboot redis key乱码
查看>>
Win10禁用自带的笔记本键盘
查看>>
insmod模块的几种常见错误
查看>>
shell及脚本4——shell script
查看>>
写时复制集合 —— CopyOnWriteArrayList
查看>>
什么是redis的缓存雪崩, 穿透, 击穿?
查看>>
数据帧CRC32校验算法实现
查看>>