上一节我们学习了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>

总结:本节我们主要讲了变量的作用域,读者需要明晰每一个作用域的作用区间,以便后续的变量访问。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)