上一节我们学习了JS中的模板字符串,本节我们将学习JS基础中有关作用域的知识。那什么是作用域呢?简单来说,作用域就是”变量生效的地方“。在JS中(ES6之后),我们只有三个作用域,它们分别是全局作用域、函数作用域和块级作用域。值得注意的是var会打破这个作用域约束,因此我们此文只谈论let/const这两个变量声明的作用域。
1. 函数作用域:
比如我们写了一个函数,那么这个函数内的变量是不会被外界所访问的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
function f()
{
let s = 'Dotcpp'
}
console.log(s)//这里控制台会报错:变量未声明被引用
</script>
</html>所以在函数内部声明的变量只能在函数内被访问到,这个访问范围被称为函数作用域。
2. 块级作用域:
在ES6后引入块级作用域,可以理解为for()循环、if语句等都是一个块级作用域。比如在if语句里创建一个变量,if外就不能进行访问:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
if(true)
{
let s='Dotcpp'
}
console.log(s);//同理报错,引用未申明变量
</script>
</html>全局作用域:
除块级作用域和函数作用域外都被称为全局作用域。
比如我们在函数和块级区域外声明一个变量,我们发现函数和块级区域都可以访问到。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
/*全局变量s*/
const s = 'Dotcpp'
/*函数区域*/
function f(){
console.log(s);
}
/*块级区域*/
if(true)
{
console.log(s);
}
console.log(s);
</script>
</html>总结:本节我们主要讲了变量的作用域,读者需要明晰每一个作用域的作用区间,以便后续的变量访问。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程