副队长JavaScript教程(39)-函数的作用域
点此查看所有教程、项目、源码导航文章目录1. 背景2. 函数作用域局部作用域3. 全局作用域4. 同名变量的就近原则补充新手高频坑5. 小结1. 背景先理解【域】这个字域代表地域、领域、范围。放到生活里空间可以分成私人领域和公共领域。举个教室的例子每个同学自己的课桌就属于私人领域课桌里的书本、文具只归这个同学使用别的同学不能随便拿、随便翻看。而教室里的扫帚、拖把、过道不属于某一个同学属于公共领域班里所有同学都可以使用。简单总结私人领域只有主人可以使用公共领域所有人都可以使用。2. 函数作用域局部作用域在 JS 函数里也有类似的 “私人领域”专业叫法就是函数作用域里面的变量我们一般叫局部变量。它的规则和课桌很像写在函数大括号里面的变量只有函数内部可以访问、使用在函数外面是访问不到这个变量的。我们来看示例代码// 定义一个函数functionmyDesk(){varbookJava入门;// 函数内部定义的局部变量}console.log(book);运行这段代码会报错原因就是变量book是写在函数里面的属于这个函数的私人领域出了这个函数外面的代码就找不到、不能使用它。从语法上理解函数作用域的范围就是函数配套一对大括号{}包裹起来的区域。在这个区域内用 var 定义的变量只能在函数内部访问外部无法访问。3. 全局作用域那如果变量写在所有函数的外面不属于任何一个函数它处在什么范围呢这个范围叫做全局作用域在这里定义的变量叫做全局变量。类比教室全局变量就相当于教室公用的拖把、扫帚整个环境都能使用。示例代码// 定义全局变量写在函数外面varbookHTML入门;console.log(book);// 函数外部直接访问functionreadBook(){console.log(book);// 函数内部也可以访问全局变量}readBook();// 调用函数全局变量在任何地方都能读到函数外面可以直接打印函数里面同样可以读取使用。总结全局作用域里的变量函数内可以访问函数外部也可以访问。4. 同名变量的就近原则补充新手高频坑这里补充一个很容易踩坑的情况如果全局和局部有一模一样名字的变量。varbookHTML入门;functionmyDesk(){varbookJava入门;console.log(book);}myDesk();console.log(book);当函数内部有同名局部变量时在函数里面优先使用自己内部这个变量这个规则叫做就近原则。局部变量不会把外面的全局变量覆盖掉两者是互相独立的。5. 小结就像现实空间分私人、公共区域JS 的变量也有访问范围的区分全局作用域写在函数外面到处都能访问。函数作用域局部写在函数大括号内部只允许函数里面访问外面访问不到。作用域是 JS 里比较深的知识点入门阶段我们先记住上面这两条核心规则建立基本概念就可以后面我们再继续深入学习。