副队长JavaScript教程(39)-函数的作用域

发布时间:2026/10/27 18:17:06
副队长JavaScript教程(39)-函数的作用域

点此查看所有教程、项目、源码导航

文章目录

  • 1. 背景
  • 2. 函数作用域(局部作用域)
  • 3. 全局作用域
  • 4. 同名变量的就近原则(补充新手高频坑)
  • 5. 小结

1. 背景

先理解【域】这个字,域代表地域、领域、范围。

放到生活里,空间可以分成私人领域和公共领域。

举个教室的例子:每个同学自己的课桌,就属于私人领域,课桌里的书本、文具只归这个同学使用,别的同学不能随便拿、随便翻看。

而教室里的扫帚、拖把、过道,不属于某一个同学,属于公共领域,班里所有同学都可以使用。

简单总结:私人领域,只有主人可以使用;公共领域,所有人都可以使用。

2. 函数作用域(局部作用域)

在 JS 函数里,也有类似的 “私人领域”,专业叫法就是函数作用域,里面的变量我们一般叫局部变量。

它的规则和课桌很像:写在函数大括号里面的变量,只有函数内部可以访问、使用;在函数外面,是访问不到这个变量的。

我们来看示例代码:

// 定义一个函数functionmyDesk(){varbook="Java入门";// 函数内部定义的局部变量}console.log(book);

运行这段代码会报错:

原因就是变量book是写在函数里面的,属于这个函数的私人领域,出了这个函数,外面的代码就找不到、不能使用它。

从语法上理解:函数作用域的范围,就是函数配套一对大括号{}包裹起来的区域。在这个区域内用 var 定义的变量,只能在函数内部访问,外部无法访问。

3. 全局作用域

那如果变量写在所有函数的外面,不属于任何一个函数,它处在什么范围呢?

这个范围叫做全局作用域,在这里定义的变量叫做全局变量。
类比教室,全局变量就相当于教室公用的拖把、扫帚,整个环境都能使用。

示例代码:

// 定义全局变量,写在函数外面varbook="HTML入门";console.log(book);// 函数外部直接访问functionreadBook(){console.log(book);// 函数内部也可以访问全局变量}readBook();// 调用函数

全局变量在任何地方都能读到:函数外面可以直接打印,函数里面同样可以读取使用。

总结:全局作用域里的变量,函数内可以访问,函数外部也可以访问。

4. 同名变量的就近原则(补充新手高频坑)

这里补充一个很容易踩坑的情况:如果全局和局部有一模一样名字的变量。

varbook="HTML入门";functionmyDesk(){varbook="Java入门";console.log(book);}myDesk();console.log(book);

当函数内部有同名局部变量时,在函数里面优先使用自己内部这个变量,这个规则叫做就近原则。
局部变量不会把外面的全局变量覆盖掉,两者是互相独立的。

5. 小结

就像现实空间分私人、公共区域,JS 的变量也有访问范围的区分:

  • 全局作用域:写在函数外面,到处都能访问。
  • 函数作用域(局部):写在函数大括号内部,只允许函数里面访问,外面访问不到。

作用域是 JS 里比较深的知识点,入门阶段我们先记住上面这两条核心规则,建立基本概念就可以,后面我们再继续深入学习。