副队长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 里比较深的知识点,入门阶段我们先记住上面这两条核心规则,建立基本概念就可以,后面我们再继续深入学习。